pricing: land £7/£70 paid tier and make behaviour match
Marketing + behaviour pass to get the site ready for Paddle approval.
Pricing page
- £7/month, £70/year headline (was "Coming soon").
- Bigger tier names (was 11px uppercase mono — looked like chips).
- Real CTAs (button base styles were only scoped to .hero__ctas).
- "Best value" badge + drop-shadow on the Paid card; full-width
block CTAs that align across both cards.
- "Free vs Paid at a glance" comparison table beneath the cards.
- Compact "Invite a friend — both get 50% off for 3 months"
callout with the detail explanation behind a <dialog> popup.
Tier copy + behaviour now consistent
- Free strategic-log refresh is every 6 hours, not hourly. New
read-side filter on /api/log/{latest,by-date} restricts free
users to logs at boundary hours (00/06/12/18 UTC); paid users
still see the most recent.
- Follow-up chat is paid-only. /api/chat returns 402 for free;
the chat sidebar on /log is replaced with a locked aside and
chat.js no longer loads at all for free users.
- Dashboard meta lines + landing copy softened so they no longer
promise hourly to everyone.
Future-proofing copy on public pages
- Dropped "free forever" wording (we may close the free tier).
- "Trading 212 CSV" became "broker CSV (Trading 212 today; more
planned)" on pricing + landing; the actual import UIs stay
T212-specific.
Terms
- Renamed Terms of Service -> Terms and Conditions (Paddle
expectation), bumped last-updated to 2026-05-26.
- New §6 Refunds covering the 14-day cooling off, post-window
cancellation, termination-by-us refunds, statutory rights, and
how to request a refund.
- Renumbered §7-§14 and fixed the disclaimer link labels.
Tests
- 6 new tests in tests/test_chat_and_log_gates.py cover the
chat 402 + the boundary-hour filter on both log endpoints.
- Full suite: 205 passed, 5 skipped, 0 failed.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
70cf6148ce
commit
2297f9b2ed
11 changed files with 757 additions and 117 deletions
|
|
@ -11,8 +11,8 @@
|
|||
tune out the high-frequency noise that comes from treating markets
|
||||
like a casino. We aggregate cross-asset news and macro signals,
|
||||
then write a plain-English read of what the underlying fundamentals
|
||||
justify versus what the crowd is doing. Refreshed hourly. A media
|
||||
service, not a financial one.
|
||||
justify versus what the crowd is doing. Refreshed through the
|
||||
trading day. A media service, not a financial one.
|
||||
</p>
|
||||
<div class="hero__ctas">
|
||||
{% if cu and (cu.user or cu.is_admin) %}
|
||||
|
|
@ -75,7 +75,7 @@
|
|||
</div>
|
||||
|
||||
<div class="feature-card">
|
||||
<div class="feature-card__tag">The hourly read</div>
|
||||
<div class="feature-card__tag">The strategic read</div>
|
||||
<h3 class="feature-card__title">Rational vs irrational, every paragraph</h3>
|
||||
<p class="feature-card__body">
|
||||
We tie the day’s headlines and the cross-asset signals into
|
||||
|
|
@ -88,8 +88,8 @@
|
|||
</p>
|
||||
<button class="shot feature-card__shot"
|
||||
data-full="{{ url_for('static', path='/images/strategic-log.png') }}"
|
||||
data-alt="Strategic log — the hourly AI read"
|
||||
data-caption="The strategic log. The model writes a fresh interpretation each hour, taking yesterday's draft as context so it updates rather than starts over. Sections are typed: date header, TL;DR, what moved, what to watch, system temperature.">
|
||||
data-alt="Strategic log — the editorial AI read"
|
||||
data-caption="The strategic log. The model writes a fresh interpretation through the trading day, taking the previous draft as context so it updates rather than starts over. Sections are typed: date header, TL;DR, what moved, what to watch, system temperature. Paid users get a refresh every hour; free users get one every six.">
|
||||
<img src="{{ url_for('static', path='/images/strategic-log.png') }}"
|
||||
alt="Strategic log thumbnail" loading="lazy">
|
||||
</button>
|
||||
|
|
@ -115,10 +115,11 @@
|
|||
|
||||
<section class="public-section">
|
||||
<p style="font-size: 13.5px; color: var(--muted);">
|
||||
Paid users can also drop a Trading 212 pie CSV for an AI
|
||||
sense-check on concentration, regime fit, and currency exposure.
|
||||
Holdings stay in your browser by default; opt in to encrypted cloud
|
||||
sync to restore on another device.
|
||||
Paid users can also drop a portfolio CSV from their broker
|
||||
(Trading 212 today, more brokers planned) for an AI sense-check on
|
||||
concentration, regime fit, and currency exposure. Holdings stay in
|
||||
your browser by default; opt in to encrypted cloud sync to restore
|
||||
on another device.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue