From f722854c077807091ada316bd3a2ce77ddce7247 Mon Sep 17 00:00:00 2001 From: Deeman Date: Thu, 19 Feb 2026 20:47:56 +0100 Subject: [PATCH] =?UTF-8?q?Rewrite=20frontend=20templates:=20Pico=20CSS=20?= =?UTF-8?q?=E2=86=92=20Tailwind=20+=20trader-focused=20copy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace all Pico CSS patterns (classless articles, role="button", inline styles, var(--pico-*)) with Tailwind component classes. Add Fraunces display font, mobile hamburger nav, brand chart colors, and new component layer (hero, feature-card, metric-card, auth-card, pricing-card, etc.). Rewrite marketing copy from generic SaaS boilerplate to coffee-trader focused messaging. Rebrand pricing tiers to Explorer/Trader/Analyst. Delete stale custom.css. No Python code changes. Co-Authored-By: Claude Sonnet 4.6 --- web/src/beanflows/auth/templates/login.html | 51 +- .../auth/templates/magic_link_sent.html | 52 +-- web/src/beanflows/auth/templates/signup.html | 58 ++- .../beanflows/billing/templates/pricing.html | 212 +++++---- .../beanflows/billing/templates/success.html | 37 +- .../dashboard/templates/countries.html | 100 ++-- .../beanflows/dashboard/templates/index.html | 178 +++---- .../dashboard/templates/settings.html | 218 ++++----- web/src/beanflows/public/templates/about.html | 70 +-- .../beanflows/public/templates/features.html | 184 +++++--- .../beanflows/public/templates/landing.html | 167 ++++--- .../beanflows/public/templates/privacy.html | 172 +++---- web/src/beanflows/public/templates/terms.html | 130 +++--- web/src/beanflows/static/css/custom.css | 40 -- web/src/beanflows/static/css/input.css | 442 ++++++++++++++++++ web/src/beanflows/templates/base.html | 135 +++--- 16 files changed, 1407 insertions(+), 839 deletions(-) delete mode 100644 web/src/beanflows/static/css/custom.css create mode 100644 web/src/beanflows/static/css/input.css diff --git a/web/src/beanflows/auth/templates/login.html b/web/src/beanflows/auth/templates/login.html index 89b9964..2670168 100644 --- a/web/src/beanflows/auth/templates/login.html +++ b/web/src/beanflows/auth/templates/login.html @@ -1,39 +1,36 @@ {% extends "base.html" %} -{% block title %}Sign In - {{ config.APP_NAME }}{% endblock %} +{% block title %}Sign In — {{ config.APP_NAME }}{% endblock %} {% block content %} -
-
-
-

Sign In

-

Enter your email to receive a sign-in link.

-
- +
+
+

Sign in to BeanFlows

+

Enter your email. We'll send a link — no password needed.

+
- - - - +
+ + - -
- - Don't have an account? - Sign up - -
-
+ +

+ Don't have an account? + Sign up +

+
{% endblock %} diff --git a/web/src/beanflows/auth/templates/magic_link_sent.html b/web/src/beanflows/auth/templates/magic_link_sent.html index b733b1b..39eea2c 100644 --- a/web/src/beanflows/auth/templates/magic_link_sent.html +++ b/web/src/beanflows/auth/templates/magic_link_sent.html @@ -1,35 +1,35 @@ {% extends "base.html" %} -{% block title %}Check Your Email - {{ config.APP_NAME }}{% endblock %} +{% block title %}Check Your Inbox — {{ config.APP_NAME }}{% endblock %} {% block content %} -
-
-
-

Check Your Email

-
- -

We've sent a sign-in link to:

-

{{ email }}

- -

Click the link in the email to sign in. The link expires in {{ config.MAGIC_LINK_EXPIRY_MINUTES }} minutes.

- +
+
+
+

Check your inbox

+

We sent a sign-in link to:

+ +

{{ email }}

+ +

Click the link in the email to sign in. It expires in {{ config.MAGIC_LINK_EXPIRY_MINUTES }} minutes.

+
- -
+ +
Didn't receive the email? -
    -
  • Check your spam folder
  • -
  • Make sure the email address is correct
  • -
  • Wait a minute and try again
  • -
- -
- - - -
+
+
    +
  • Check your spam folder
  • +
  • Make sure the email address is correct
  • +
  • Wait a minute and try again
  • +
+
+ + + +
+
-
+
{% endblock %} diff --git a/web/src/beanflows/auth/templates/signup.html b/web/src/beanflows/auth/templates/signup.html index a87ed09..765b768 100644 --- a/web/src/beanflows/auth/templates/signup.html +++ b/web/src/beanflows/auth/templates/signup.html @@ -1,44 +1,40 @@ {% extends "base.html" %} -{% block title %}Sign Up - {{ config.APP_NAME }}{% endblock %} +{% block title %}Sign Up — {{ config.APP_NAME }}{% endblock %} {% block content %} -
-
-
-

Create Account

-

Enter your email to get started.

-
- +
+
+

Create your BeanFlows account

+

Free plan. Real data. No credit card.

+
- - - - {% if plan and plan != 'free' %} - You'll be able to subscribe to the {{ plan | title }} plan after signing up. - {% endif %} - - + {% if plan and plan != 'free' %} +

You'll be able to subscribe to the {{ plan | title }} plan after signing up.

+ {% endif %} +
+ + - -
- - Already have an account? - Sign in - -
-
+ +

+ Already have an account? + Sign in +

+
{% endblock %} diff --git a/web/src/beanflows/billing/templates/pricing.html b/web/src/beanflows/billing/templates/pricing.html index 99a819e..6dd3e26 100644 --- a/web/src/beanflows/billing/templates/pricing.html +++ b/web/src/beanflows/billing/templates/pricing.html @@ -1,119 +1,147 @@ {% extends "base.html" %} -{% block title %}Pricing - {{ config.APP_NAME }}{% endblock %} +{% block title %}Pricing — {{ config.APP_NAME }}{% endblock %} {% block content %} -
-
-

Simple, Transparent Pricing

-

Start free with coffee data. Upgrade when you need more.

-
+
+ +
+
+

Pick your depth of data

+

Every plan includes the full dashboard. Upgrade when you need more history, exports, or API access.

+
+
-
- -
-
-

Free

-

$0 /month

-
-
    -
  • Coffee dashboard
  • -
  • Last 5 years of data
  • -
  • Global & country charts
  • -
  • Community support
  • -
-
- {% if user %} - {% if (user.plan or 'free') == 'free' %} - + +
+
+ +
+
+

Explorer

+
+ $0 + /forever +
+
+
    +
  • ✓ Full coffee dashboard
  • +
  • ✓ Last 5 years of data
  • +
  • ✓ Global & country charts
  • +
  • ✓ Community support
  • +
+
+ {% if user %} + {% if (user.plan or 'free') == 'free' %} + + {% else %} + + {% endif %} {% else %} - + Start free {% endif %} - {% else %} - Get Started - {% endif %} -
-
+
+ - -
-
-

Starter

-

TBD /month

-
-
    -
  • Full coffee history (18+ years)
  • -
  • CSV data export
  • -
  • REST API access (10k calls/mo)
  • -
  • Email support
  • -
-
- {% if user %} - {% if (user.plan or 'free') == 'starter' %} - + +
+ Most popular +
+

Trader

+
+ TBD + /mo +
+
+
    +
  • ✓ Full coffee history (18+ years)
  • +
  • ✓ CSV data export
  • +
  • ✓ REST API access (10k calls/mo)
  • +
  • ✓ Email support
  • +
+
+ {% if user %} + {% if (user.plan or 'free') == 'starter' %} + + {% else %} +
+ + +
+ {% endif %} {% else %} -
- - -
+ Get started {% endif %} - {% else %} - Get Started - {% endif %} -
-
+ + - -
-
-

Pro

-

TBD /month

-
-
    -
  • All 65 USDA commodities
  • -
  • Unlimited API calls
  • -
  • CSV & API export
  • -
  • Priority support
  • -
-
- {% if user %} - {% if (user.plan or 'free') == 'pro' %} - + +
+
+

Analyst

+
+ TBD + /mo +
+
+
    +
  • ✓ All 65 USDA commodities
  • +
  • ✓ Unlimited API calls
  • +
  • ✓ CSV & API export
  • +
  • ✓ Priority support
  • +
+
+ {% if user %} + {% if (user.plan or 'free') == 'pro' %} + + {% else %} +
+ + +
+ {% endif %} {% else %} -
- - -
+ Get started {% endif %} - {% else %} - Get Started - {% endif %} -
-
- + + + + -
-

Frequently Asked Questions

+
+
+

Frequently asked questions

+
-
+
Where does the data come from? -

All data comes from the USDA Production, Supply & Distribution (PSD) Online database, which is freely available. We process and transform it daily into analytics-ready metrics.

+

All data comes from the USDA Production, Supply & Distribution (PSD) Online database, which is freely available. We extract, transform, and structure it daily into analytics-ready metrics.

-
+
+ What's the difference between 5 years and 18 years of history? +

The free Explorer plan shows the last 5 market years. Trader and Analyst plans unlock the full dataset going back to 2006, giving you deeper context for long-term trend analysis.

+
+ +
Can I change plans later? -

Yes. Upgrade or downgrade at any time. Changes take effect immediately with prorated billing.

+

Yes. Upgrade or downgrade at any time. Changes take effect immediately with prorated billing handled by Paddle.

-
- What commodities are available on Pro? -

All 65 commodities tracked by USDA PSD, including coffee, cocoa, sugar, cotton, grains, oilseeds, and more.

+
+ What format is the CSV export? +

Standard CSV with headers. One row per country per market year. Compatible with Excel, Google Sheets, Python, R, and any tool that reads CSV.

-
- How do I cancel? -

Cancel anytime from your dashboard settings. You keep access until the end of your billing period.

+
+ How does the API work? +

Generate an API key from your dashboard settings. Use Bearer token authentication with standard REST endpoints for commodity listing, time series, and country data. Full docs available after signup.

+
+ +
+ Is the free plan really free forever? +

Yes. No trial period, no credit card required. The Explorer plan is free for as long as you use it.

diff --git a/web/src/beanflows/billing/templates/success.html b/web/src/beanflows/billing/templates/success.html index 8190b6e..6a03ad6 100644 --- a/web/src/beanflows/billing/templates/success.html +++ b/web/src/beanflows/billing/templates/success.html @@ -1,26 +1,27 @@ {% extends "base.html" %} -{% block title %}Success! - {{ config.APP_NAME }}{% endblock %} +{% block title %}You're All Set — {{ config.APP_NAME }}{% endblock %} {% block content %} -
-
-
-

🎉 Welcome Aboard!

-
- -

Your subscription is now active. You have full access to all features included in your plan.

- -

- Go to Dashboard -

- +
+
+
+ + + + +
+

You're all set

+

Your subscription is now active. You have full access to all features included in your plan.

+ + Go to Dashboard +
- -

- Need to manage your subscription? Visit + +

+ Need to manage your subscription? Visit account settings. -

-
+

+
{% endblock %} diff --git a/web/src/beanflows/dashboard/templates/countries.html b/web/src/beanflows/dashboard/templates/countries.html index 297d495..bb323c1 100644 --- a/web/src/beanflows/dashboard/templates/countries.html +++ b/web/src/beanflows/dashboard/templates/countries.html @@ -1,76 +1,98 @@ {% extends "base.html" %} -{% block title %}Country Comparison - {{ config.APP_NAME }}{% endblock %} +{% block title %}Country Comparison — {{ config.APP_NAME }}{% endblock %} {% block head %} {% endblock %} {% block content %} -
-
+
+ +
+ -
-
- - -
-
+
+
+
+
+ + +
+
+ + +
+
+
+
{% if comparison_data %} -
- -
+
+ +
{% else %} -
-

Select countries above to see the comparison chart.

-
+
+ Select countries above to see the comparison chart. +
{% endif %} - Back to Dashboard + Back to Dashboard
{% endblock %} {% block scripts %} {% endblock %} {% block content %} -
-
+
+ +
+ -
-
-
Global Production (latest year)
-

- {{ "{:,.0f}".format(latest.get("Production", 0)) }} -

- 1,000 60-kg bags -
+
+
+
Global Production (latest year)
+
{{ "{:,.0f}".format(latest.get("Production", 0)) }}
+
1,000 60-kg bags
+
-
-
Stock-to-Use Ratio
-

+

+
Stock-to-Use Ratio
+
{% if stu_trend %} - {{ "{:.1f}".format(stu_trend[-1].get("Stock_to_Use_Ratio_pct", 0)) }}% + {{ "{:.1f}".format(stu_trend[-1].get("Stock_to_Use_Ratio_pct", 0)) }}% {% else %} - -- + -- {% endif %} -

- Ending stocks / consumption -
+
+
Ending stocks / consumption
+
-
-
Trade Balance
-

- {{ "{:,.0f}".format(latest.get("Exports", 0) - latest.get("Imports", 0)) }} -

- Exports minus imports -
+
+
Trade Balance
+
{{ "{:,.0f}".format(latest.get("Exports", 0) - latest.get("Imports", 0)) }}
+
Exports minus imports
+
-
-
Your Plan
-

{{ plan | title }}

- +
+
Your Plan
+
{{ plan | title }}
+
{% if plan == "free" %} Upgrade for full history {% else %} {{ stats.api_calls }} API calls (30d) {% endif %} - -
+ + -
-

Global Supply & Demand

+
+

Global Supply & Demand

{% if plan == "free" %} -

Showing last 5 years. Upgrade for full 18+ year history.

+
Showing last 5 years. Upgrade for full 18+ year history.
{% endif %} - -
+ + -
-

Stock-to-Use Ratio Trend

- -
+
+

Stock-to-Use Ratio Trend

+ +
-
-
-

Top Producing Countries

- -
+
+
+

Top Producing Countries

+ +
-
-

Year-over-Year Production Change

-
- +
+

Year-over-Year Production Change

+
+
- - + + {% for row in yoy %} - - +
CountryProductionYoY %ProductionYoY %
{{ row.country_name }}{{ "{:,.0f}".format(row.Production) }} + {{ "{:,.0f}".format(row.Production) }} {% if row.Production_YoY_pct is not none %} {{ "{:+.1f}%".format(row.Production_YoY_pct) }} {% else %} @@ -106,39 +103,58 @@
-
+
{% if plan != "free" %} -
- Export CSV -
+ {% else %} -
-

CSV export available on Starter and Pro plans. Upgrade

-
+
CSV export available on Trader and Analyst plans. Upgrade
{% endif %} -
- -
+
{% endblock %} {% block scripts %} - + {% block scripts %}{% endblock %}