read.markets/app/templates/pricing.html
Giorgio Gilestro 70cf6148ce pricing: reflect what's actually shipped — add chat, tighten bullets
Audit against the live feature set surfaced one missing entry and a few
soft phrasings:

- Free now lists "Ask follow-up questions on any past log" — the /api/chat
  endpoint has no paid gate (router-level require_token only), so it's
  available to every signed-in user. The landing-page screenshot already
  showed it; the pricing page didn't mention it.

- "Per-group cross-asset summaries" → "Cross-asset indicator panels
  (equities, rates, FX, …) with a one-paragraph AI read on each tab" —
  more concrete about what the user actually sees.

- "Novice / Intermediate reading levels" → spelled out what each does
  (Novice defines jargon; Intermediate is terse).

- Free's exclusion list explicitly includes "Daily email digest" so the
  paid/free distinction reads cleanly without back-and-forth.

- Paid's daily-digest bullet now leads with the word count target
  (~600 words) so the value is concrete, not abstract.

- Encrypted cloud sync bullet now names the actual security model
  (PIN-derived in-browser + server-side outer wrap).

Added a small "Invite a friend" footnote — the credit ledger and invite
link both ship today; the rate kicks in with the payments rollout. Honest
phrasing keeps it from looking like vaporware.

Intro paragraph rewritten to lead with what's free (most of the editorial)
rather than what paid extends, since the free tier is the entry point.
2026-05-26 00:33:23 +02:00

108 lines
4.9 KiB
HTML

{% extends "public_base.html" %}
{% block title %}{{ BRAND_NAME }} · Pricing{% endblock %}
{% block main %}
<section class="public-section">
<h1 class="public-section__head">Pricing</h1>
<p>
Two tiers. Most of the editorial stays free &mdash; the news
aggregator, the hourly AI read, the indicator panels, the
follow-up chat. Paid extends the news window from 6 hours to a
full 24, unlocks portfolio import &amp; analysis, and adds a
daily email digest on top of the Sunday recap everyone gets.
</p>
</section>
<section class="tier-grid">
<div class="tier-card">
<div class="tier-card__name">Free</div>
<div class="tier-card__price">&pound;0</div>
<div class="tier-card__price-hint">Forever. No card needed.</div>
<ul>
<li>News aggregator &mdash; last 6 hours, auto-tagged by theme, click-to-filter</li>
<li>Cross-asset indicator panels (equities, rates, FX, commodities, credit, &hellip;) with a one-paragraph AI read on each tab</li>
<li>Hourly strategic log &mdash; a single editorial interpretation of the day, updated each hour</li>
<li>Ask follow-up questions on any past log &mdash; the chat has the day&rsquo;s context loaded</li>
<li>Two reading levels: <em>Novice</em> (defines jargon) or <em>Intermediate</em> (terse, for fluent readers)</li>
<li><strong>Sunday weekly digest by email</strong> &mdash; the week behind + the week ahead, one-click unsubscribe</li>
<li class="tier-card__excluded">Portfolio import &amp; analysis</li>
<li class="tier-card__excluded">Encrypted cloud sync</li>
<li class="tier-card__excluded">Daily email digest</li>
</ul>
<div class="tier-card__cta">
{% if cu and (cu.user or cu.is_admin) %}
<a class="btn-secondary" href="/">Open dashboard</a>
{% else %}
<a class="btn-primary" href="/login">Sign up free</a>
{% endif %}
</div>
</div>
<div class="tier-card tier-card--featured">
<div class="tier-card__name">Paid</div>
<div class="tier-card__price">Coming soon</div>
<div class="tier-card__price-hint">Checkout opens with our payments rollout.</div>
<ul>
<li>Everything in Free</li>
<li><strong>News aggregator &mdash; full 24 hours</strong> (vs. 6 hours on Free)</li>
<li><strong>Daily email digest</strong> (Mon&ndash;Sat) &mdash; a ~600-word read of the session ahead, in addition to the Sunday recap</li>
<li>Portfolio import from a Trading 212 CSV</li>
<li>AI commentary on diversification, sector and currency concentration, and macro-regime fit for the holdings you upload</li>
<li>Optional encrypted cloud sync &mdash; PIN-derived encryption in your browser, second-layer wrap on the server, no plaintext holdings server-side</li>
</ul>
<div class="tier-card__cta">
{% if cu and (cu.user or cu.is_admin) %}
<a class="btn-secondary" href="/settings">Manage account</a>
{% else %}
<a class="btn-primary" href="/login">Sign up &mdash; paid unlocks soon</a>
{% endif %}
</div>
<p style="margin-top:14px; font-size:11.5px; color: var(--muted); font-style: italic; line-height:1.55;">
The portfolio feature does not produce buy, sell or hold
recommendations. It does not consider your wider finances, debts,
tax position or objectives. It is not regulated investment advice
or a personal recommendation under FSMA / FCA COBS.
</p>
</div>
</section>
<section class="public-section">
<p style="font-size: 13px; color: var(--muted);">
<strong>Invite a friend.</strong> Every account gets a personal
invite link from the Settings page. When friends sign up through
it, we credit you toward the paid tier &mdash; the credit ledger
is live; the rate kicks in with the payments rollout.
</p>
</section>
<section class="public-section">
<h2 class="public-section__head">How the data is handled</h2>
<p>
Your portfolio holdings live in your browser&rsquo;s local storage by
default. The server only learns which Yahoo tickers appear across the
user base &mdash; an anonymous union, with no link back to any specific
user.
</p>
<p>
If you opt in to <strong>encrypted cloud sync</strong>, your pie is
encrypted in your browser with a PIN you choose, then sent to the
server. We add a second layer of encryption with a key only the
server holds. We never see your holdings as plaintext, and forgetting
the PIN means we can&rsquo;t recover it for you. Full details on the
<a href="/privacy">privacy page</a>.
</p>
</section>
<section class="public-section public-section--callout">
<p style="margin:0;">
<strong>Not investment advice.</strong> Every output here is an
interpretation of public data &mdash; not personalised advice, not a
recommendation, and not produced by a regulated entity. Read the full
<a href="/disclaimer">disclaimer</a> before relying on anything you see.
</p>
</section>
{% endblock %}