Commit Graph
4 Commits
Author SHA1 Message Date
westfarnandCursor 760b06f3f4 Let a chat prompt include an image the model can read.
Unit Tests / test (pull_request) Successful in 37s
The composer accepts PNG, JPEG, WebP, and GIF, shows a thumbnail before send, and keeps the image on the user turn after reload. Closes #128.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-20 08:11:56 -05:00
westfarn 36341f6e72 Product page: lifetime price, rounded usage, roadmap (#126)
Deploy Beta / unit-tests (push) Successful in 13s
Unit Tests / test (push) Successful in 13s
Deploy Beta / deploy-beta (push) Successful in 3m23s
## Summary
- Closes #123.
- Hide account and document counts until there are 20 accounts. After that, both figures round down to one significant digit and show a plus, so the page never publishes an exact count.
- The product page and pricing page say early adopters pay $10 per month, locked for the lifetime of the account, and that price never goes up.
- The product page adds a roadmap section for image generation and vision.

## Test plan
- [ ] With fewer than 20 accounts, the product page shows no usage figures.
- [ ] With 23 accounts and 156 documents, the page shows 20+ accounts and 100+ documents stored, plus the as-of date.
- [ ] The product page states the lifetime $10 lock and lists image generation and vision under Roadmap.
- [ ] The pricing page states the same lifetime lock.

Reviewed-on: #126
2026-10-19 08:14:49 -07:00
westfarn 7a8f413483 Public page SEO and production analytics (#125)
Deploy Beta / unit-tests (push) Successful in 13s
Unit Tests / test (push) Successful in 13s
Deploy Beta / deploy-beta (push) Successful in 3m50s
## Summary
- Closes the public-page gaps from #124: each route gets its own title, description, canonical, heading, links, and JSON-LD, and unknown URLs have a real 404 document.
- Adds HeyCatch and the Google tag (`G-V12DLRLPWR`) only on the production site and the iOS and Android apps. Tianji still loads on beta.
- Needs the server-infra change that stops serving the app shell for missing paths.

## Test plan
- [ ] Build production and confirm `/` and `/pricing/` HTML include a unique title, description, canonical, one h1, social tags, related links, and Organization JSON-LD.
- [ ] Confirm a nonsense path is served as `404.html` once the nginx change is deployed.
- [ ] Confirm beta and local web do not load HeyCatch or gtag, and that a production or native build does.
- [ ] Open the live site after deploy and click around, then mark HeyCatch installed in its dashboard.

Reviewed-on: #125
2026-10-19 08:01:44 -07:00
westfarn fa91c4969f Public homepage, pricing, privacy, changelog, and SEO (#117)
Deploy Beta / unit-tests (push) Successful in 13s
Unit Tests / test (push) Successful in 12s
Deploy Beta / deploy-beta (push) Successful in 5m0s
## Summary
- Logged-out `/` is a public landing page. Signed-in `/` still opens chat.
- Adds `/pricing/`, `/privacy/`, and `/changelog/`, plus header and footer links.
- Primary path is **Create account** when registration is on, and an email **waitlist** when it is off.
- Titles, canonicals, Organization and Product JSON-LD, `sitemap.xml`, `robots.txt`, and `llms.txt`.
- Usage counts render only from `GET /api/public/usage/`. No avatars. No founder block. No testimonials.
- Closes #113, #114, #115, and #116.

Needs [chat_backend#75](https://git.aimloperations.com/ai_ml_operations/chat_backend/pulls) for the waitlist and usage API, and the server-infra crawler-file change so those root files are not the SPA shell.

The account and document numbers in the screenshots come from a local mock of the usage API, not production.

## Screenshots

### Landing, registration off
![Landing waitlist desktop](https://git.aimloperations.com/ai_ml_operations/chat_web_app/raw/branch/feat/113-public-site/llm-fe/docs/ux/landing-desktop.png)

### Landing, mobile
![Landing mobile](https://git.aimloperations.com/ai_ml_operations/chat_web_app/raw/branch/feat/113-public-site/llm-fe/docs/ux/landing-mobile.png)

### Landing, registration on
![Landing create account](https://git.aimloperations.com/ai_ml_operations/chat_web_app/raw/branch/feat/113-public-site/llm-fe/docs/ux/landing-signup.png)

### Pricing
![Pricing](https://git.aimloperations.com/ai_ml_operations/chat_web_app/raw/branch/feat/113-public-site/llm-fe/docs/ux/pricing.png)

### Privacy
![Privacy](https://git.aimloperations.com/ai_ml_operations/chat_web_app/raw/branch/feat/113-public-site/llm-fe/docs/ux/privacy.png)

### Changelog
![Changelog](https://git.aimloperations.com/ai_ml_operations/chat_web_app/raw/branch/feat/113-public-site/llm-fe/docs/ux/changelog.png)

### Sign in unchanged
![Sign in](https://git.aimloperations.com/ai_ml_operations/chat_web_app/raw/branch/feat/113-public-site/llm-fe/docs/ux/signin.png)

## Test plan
- [x] `react-scripts test` — 234 passed
- [ ] Incognito `/` shows the landing page, not Sign In
- [ ] Signed-in `/` still opens chat
- [ ] `/account/` still redirects to `/signin/` when logged out
- [ ] Waitlist POST and usage GET against the new API
- [ ] `/robots.txt`, `/sitemap.xml`, and `/llms.txt` return plain text, not HTML

Reviewed-on: #117
2026-10-17 08:15:02 -07:00