Commit Graph

482 Commits

Author SHA1 Message Date
Deeman
c7d2e5d756 fix leftover stripe references in admin user detail
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 12:06:00 +01:00
Deeman
97e3310998 add migration docs & tests, fix empty env var crash
- Expand migrate.py docstring with algorithm, protocol, and design decisions
- Add 20-test suite for migration framework (test_migrations.py)
- Fix: empty env vars (SECRET_KEY=) now fall back to defaults via _env() helper

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 11:37:00 +01:00
Deeman
674e051084 fix 0001 migration: skip rename if columns already renamed
Production DB had already been migrated by the manual script, so
the old lemonsqueezy columns no longer exist. Check column names
before attempting the rename.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 11:07:25 +01:00
Deeman
5bcc048183 update changelog with sequential migration system
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 10:58:42 +01:00
Deeman
c10cd4d714 add sequential migration system with version tracking
Replace the simple schema.sql runner with a proper sequential
migration system that tracks applied versions in a _migrations table.
Absorb scripts/migrate_to_paddle.py as versions/0001.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 10:57:28 +01:00
Deeman
25d06a80d5 switch payment provider from LemonSqueezy to Paddle
Run copier update with payment_provider=paddle to switch all billing
integration: routes, config, schema columns, webhook handling, tests,
and CI deploy secrets. Add one-time migration script for renaming
lemonsqueezy_* columns to paddle_* in production DB.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 10:40:40 +01:00
Deeman
53ca195a49 update copier src_path to match renamed template directory
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 21:55:25 +01:00
Deeman
ac9ce179fd add favicon extracted from logo P glyph
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 20:06:23 +01:00
Deeman
484428d71f redesign landing page: better teaser calc, value-focused CTAs
Replace toy-like sliders (rent/m², exit multiple) with more intuitive
inputs (build cost per court, equity %). Replace outputs (annual revenue,
equity IRR) with payback period and cash-on-cash return. Show model
assumptions inline. Remove "free" messaging from all CTAs and meta tags,
focus on the plan→suppliers→financing value chain instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 02:36:33 +01:00
Deeman
9c2465e4c5 force heading colors with !important to beat Pico's cascade
The variable-based overrides (--pico-h1-color, --pico-color) weren't
reliably winning against Pico's multi-layer cascade of theme selectors,
prefers-color-scheme media queries, and variable indirection. Headings
were rendering near-white (#f0f1f3) on dark-OS systems despite
data-theme="light". Using !important on color is the pragmatic fix.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 02:11:53 +01:00
Deeman
f562df8437 fix heading colors on dark-OS systems, increase logo size
The heading color override (bare h1 selector, specificity 0,0,1) was
losing to Pico's theme-scoped heading rules ([data-theme=light] h1,
specificity 0,1,1). On systems with prefers-color-scheme: dark, Pico's
dark heading colors (#f0f1f3 — near white) leaked through, making
headings invisible on the light background.

Fix: scope heading overrides under [data-theme="light"] to match Pico's
specificity. Also bump nav logo from 24px to 32px, footer to 24px.

Visual tests now run with color_scheme="dark" to catch this class of bug.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 00:16:31 +01:00
Deeman
6bba19f628 skip visual tests in CI — require explicit -m visual flag
Playwright visual tests need browser binaries (playwright install
chromium) which CI doesn't have. Mark them with pytest.mark.visual
and add addopts = "-m 'not visual'" so they're skipped by default.

Run locally with: uv run pytest -m visual tests/test_visual.py -v

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 23:59:53 +01:00
Deeman
dc685e8e7b fix logo sizing, heading colors, and add Playwright visual tests
- Trim logo background to transparent, use inline style height to
  override Pico's img { height: auto } — nav 24px, footer 20px
- Fix heading colors by setting --pico-h1-color through --pico-h6-color
  variables and --pico-color override on heading elements
- Add white-space:nowrap on nav CTA button to prevent wrapping
- Add Playwright visual test suite (11 tests): screenshots of landing,
  login, signup, mobile; assertions for light background, dark headings,
  logo presence, nav layout, no dark remnants
- Screenshots saved to tests/screenshots/ for manual review

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 23:56:39 +01:00
Deeman
6df3f8d388 switch from dark to light theme matching Court Tech brand guide
Replace dark navy backgrounds with soft white, update all CSS variables,
Chart.js colors, and inline styles across the app. Add logo to nav and
footer. Landing page teaser calculator, planner, and all inherited pages
now use the light theme with deep navy headings and electric blue accents.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 23:06:12 +01:00
Deeman
1e56087060 fix deploy.sh stopping router during blue-green switch
docker compose --profile stop also stops non-profiled services (router,
litestream), causing 502. Now explicitly names only slot services to stop.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 22:16:19 +01:00
Deeman
337816c6c1 fix env_file path to use padelnomics/.env
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 16:44:33 +01:00
Deeman
a94408051e update readme 2026-02-13 16:10:25 +01:00
Deeman
be35738997 fix ruff lint errors across all source files
Auto-fixed import sorting (I001) and unused imports (F401) via ruff --fix.
Manually fixed unused variable month_ago (F841) and lambda assignment (E731).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 16:00:37 +01:00
Deeman
76ef8f1c29 fix pytest call 2026-02-13 14:52:56 +01:00
Deeman
fa09fc81c9 add CI/CD pipeline with blue-green deployment
GitLab CI runs pytest + ruff on master/MRs, then auto-deploys via SSH.
Blue-green strategy using Docker Compose profiles with an nginx router
on port 5000 for zero-downtime switching between slots.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 14:39:15 +01:00
Deeman
3dbdd17ddb remove local path from changelog entry
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 12:17:16 +01:00
Deeman
9703651562 add hybrid calculator refactor and comprehensive billing test suite
Move planner financial model from client-side JS to server-side Python
(calculator.py + /planner/calculate endpoint). Add full test coverage:
227 calculator tests and 371 billing tests covering SQL helpers,
webhooks, routes, and subscription gating with Hypothesis fuzzing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 12:05:03 +01:00
Deeman
cf11add1e5 add Podscan-inspired teaser calculator to landing page
Interactive ROI estimate with 5 sliders (courts, peak rate, utilization,
rent/sqm, exit multiple) and 4 output metrics (investment, monthly cash flow,
annual revenue, equity IRR). Simplified model with Newton-Raphson IRR solver.
Soft-gates full planner behind signup CTA.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 08:24:54 +01:00
Deeman
9b1963618c apply Court Tech brand design across app
Switch from Outfit/red accent to Inter/Electric Blue (Court Tech Proposal 1).
Updates Pico CSS overrides, planner CSS variables, Chart.js colors, and
Google Fonts. Deep Navy #0F172A backgrounds, Electric Blue #3B82F6 accent,
Vibrant Green #10B981 success, Soft White #F8FAFC headings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 08:22:06 +01:00
Deeman
ae0be85544 add minimal README.md required by hatchling build
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 08:13:34 +01:00
Deeman
2ef9822d95 apply copier update: switch to LemonSqueezy payment provider
Update from materia_saas_boilerplate template with payment_provider=lemonsqueezy.
Adds full LemonSqueezy billing routes (checkout, webhooks, subscription management),
HMAC webhook verification, subscriptions/API keys schema, and removes Caddy in favor
of Nginx Proxy Manager.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 08:09:31 +01:00
Deeman
2f4be38e07 add scratch 2026-02-13 07:53:24 +01:00
Deeman
71b94e97e8 updates 2026-02-12 22:14:10 +01:00
Deeman
403b6661ba add landing page react generated 2026-02-11 23:01:25 +01:00
Deeman
aa57156d9d updates 2026-02-11 22:52:06 +01:00
Deeman
49c0ed31f1 add .claude 2026-02-11 21:25:00 +01:00
Deeman
c6ce001aae initial commit 2026-02-11 14:53:09 +01:00