diff --git a/.github/workflows/launchdarkly-code-refs.yml b/.github/workflows/launchdarkly-code-refs.yml index c9f90b4..437da16 100644 --- a/.github/workflows/launchdarkly-code-refs.yml +++ b/.github/workflows/launchdarkly-code-refs.yml @@ -5,6 +5,11 @@ on: types: [opened, synchronize, reopened] branches: [main] +permissions: + contents: read + pull-requests: write + issues: write + jobs: find-feature-flags: runs-on: ubuntu-latest diff --git a/.gitignore b/.gitignore index 7bd8769..51e2c44 100644 --- a/.gitignore +++ b/.gitignore @@ -207,4 +207,9 @@ marimo/_lsp/ __marimo__/ # Mac stuff -.DS_Store \ No newline at end of file +.DS_Store + +# swisseph stuff +swisseph/sepl_18.se1.* +swisseph/semo_18.se1.* +swisseph/seas_18.se1.* \ No newline at end of file diff --git a/config.py b/config.py index 5d4fd7f..b764bd9 100644 --- a/config.py +++ b/config.py @@ -40,4 +40,4 @@ 10: "10th House (Career/Reputation) 🏆", 11: "11th House (Friends/Hopes) 👥", 12: "12th House (Spirituality/Subconscious) 🔮" -} +} \ No newline at end of file diff --git a/static/css/style.css b/static/css/style.css index 80b0968..e18afdd 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -110,10 +110,10 @@ input:focus, select:focus { button { font-family: 'Space Mono', monospace; - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; + background: transparent; + color: #667eea; padding: 15px 30px; - border: none; + border: 2px solid #667eea; border-radius: 25px; font-size: 18px; font-weight: bold; @@ -121,13 +121,14 @@ button { width: 100%; margin-top: 10px; transition: all 0.3s ease; - box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); + box-shadow: none; } button:hover { transform: translateY(-2px); - box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4); - background: linear-gradient(135deg, #5a67d8 0%, #6b46c1 100%); + background: rgba(102, 126, 234, 0.1); + border-color: #5a67d8; + color: #5a67d8; } button:disabled, @@ -140,7 +141,7 @@ button.loading { button:disabled:hover, button.loading:hover { transform: none; - box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); + background: transparent; } /* Spinner Animation */ @@ -386,10 +387,10 @@ button.loading:hover { .location-search button { font-family: 'Space Mono', monospace; - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - color: white; + background: transparent; + color: #667eea; padding: 12px 24px; - border: none; + border: 2px solid #667eea; border-radius: 25px; font-size: 16px; font-weight: bold; @@ -398,14 +399,15 @@ button.loading:hover { width: auto; min-width: auto; transition: all 0.3s ease; - box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); + box-shadow: none; margin-top: 0; } .location-search button:hover { transform: translateY(-2px); - box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4); - background: linear-gradient(135deg, #5a67d8 0%, #6b46c1 100%); + background: rgba(102, 126, 234, 0.1); + border-color: #5a67d8; + color: #5a67d8; } .location-search button:disabled { @@ -416,7 +418,7 @@ button.loading:hover { .location-search button:disabled:hover { transform: none; - box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); + background: transparent; } #locationMap { @@ -458,6 +460,51 @@ input[readonly] { min-width: 180px; } +/* Main CTA Button - Experiment Variant */ +.button-group button.main-cta { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + color: #ffffff; + font-size: 1.1em; + font-weight: 700; + padding: 18px 32px; + border: 2px solid transparent; + box-shadow: 0 8px 20px rgba(102, 126, 234, 0.4); + transform: scale(1); + transition: all 0.3s ease; +} + +.button-group button.main-cta:hover { + transform: scale(1.05); + box-shadow: 0 12px 28px rgba(102, 126, 234, 0.5); + background: linear-gradient(135deg, #764ba2 0%, #667eea 100%); +} + +.button-group button.main-cta:active { + transform: scale(0.98); +} + +.dark-mode .button-group button.main-cta { + background: linear-gradient(135deg, #7c3aed 0%, #a855f7 100%); + box-shadow: 0 8px 20px rgba(124, 58, 237, 0.4); +} + +.dark-mode .button-group button.main-cta:hover { + background: linear-gradient(135deg, #a855f7 0%, #7c3aed 100%); + box-shadow: 0 12px 28px rgba(124, 58, 237, 0.5); +} + +/* Dark mode outline buttons */ +.dark-mode button:not(.main-cta) { + color: #a78bfa; + border-color: #a78bfa; +} + +.dark-mode button:not(.main-cta):hover { + background: rgba(167, 139, 250, 0.1); + border-color: #c4b5fd; + color: #c4b5fd; +} + /* Responsive design for location search */ @media (max-width: 600px) { .location-search { diff --git a/static/js/ld-experiment.js b/static/js/ld-experiment.js new file mode 100644 index 0000000..fe139fd --- /dev/null +++ b/static/js/ld-experiment.js @@ -0,0 +1,44 @@ +// LaunchDarkly Experiment - Main CTA Button +(function() { + const ldClientId = "692742d0a95e1a0ac789ca56"; + + // Wait for LaunchDarkly SDK to be available + if (typeof window.LDClient === 'undefined') { + console.warn('LaunchDarkly SDK not loaded'); + return; + } + + const context = { + kind: 'user', + key: 'anonymous-' + Math.random().toString(36).substring(7), + anonymous: true + }; + + const ldClient = window.LDClient.initialize(ldClientId, context); + + + + + + ldClient.on('ready', () => { + const showMainCta = ldClient.variation('get-horoscope-main-button-experiment', false); + + if (showMainCta) { + const horoscopeButton = document.querySelector('button[formaction="/chart"]'); + if (horoscopeButton) { + horoscopeButton.classList.add('main-cta'); + } + } + }); + + ldClient.on('change:get-horoscope-main-button-experiment', (value) => { + const horoscopeButton = document.querySelector('button[formaction="/chart"]'); + if (horoscopeButton) { + if (value) { + horoscopeButton.classList.add('main-cta'); + } else { + horoscopeButton.classList.remove('main-cta'); + } + } + }); +})(); diff --git a/templates/index.html b/templates/index.html index 1dbde44..0ae5303 100644 --- a/templates/index.html +++ b/templates/index.html @@ -9,6 +9,10 @@ + + + + {% endblock %} {% block content %}