mirror of
https://github.com/backnotprop/plannotator.git
synced 2026-09-14 14:17:26 +08:00
93e8b5dfcf
* Add Plannotator Workspaces waitlist (page + worker + CI) Marketing - New /workspaces/ page: hero+form sibling layout on desktop; mobile reorders to hero -> form -> info -> banners so the CTA is reachable on the first scroll. Uses the marketing site tokens/fonts and the existing border-x editorial column. Theme-aware via the cookie. - Adds a "head" slot to Base.astro for per-page <head> additions. - Nav: new "Workspaces" link with a "soon" pill. - Landing: small Workspaces CTA band before the final install CTA. Waitlist worker (apps/waitlist-service) - Cloudflare Worker + D1 (SQLite). Mirrors the paste-service layout. - Endpoints: POST /signup (Turnstile-protected, rate-limited, honeypot), GET /health, GET /admin/count, GET /admin/list gated by Bearer ADMIN_TOKEN. - Validation: required email + company + team_size; optional note + is_contributor; honeypot field; freemail-aware company auto-inference. - D1 schema includes a non-destructive 001 migration that adds note and is_contributor columns. 19/19 validation unit tests pass; tsc clean. CI - Adds a deploy-waitlist job to .github/workflows/deploy.yml mirroring paste-service. Uses the existing CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID secrets, so no new repo config is required. Generated with [Devin](https://cli.devin.ai/docs) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> * Force light mode on /workspaces/ The page is designed and signed off in light. Override the saved theme cookie via a head-slot inline script that adds the `.light` class before paint. Base.astro's cookie reader only adds the class (never removes), so any saved-dark preference can't undo this. Generated with [Devin](https://cli.devin.ai/docs) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --------- Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
26 lines
1002 B
TOML
26 lines
1002 B
TOML
name = "plannotator-waitlist"
|
|
main = "targets/cloudflare.ts"
|
|
compatibility_date = "2024-12-01"
|
|
|
|
# Run `bun run db:create` once, then paste the returned `database_id` below.
|
|
[[d1_databases]]
|
|
binding = "WAITLIST_DB"
|
|
database_name = "plannotator-waitlist"
|
|
database_id = "797d1a5a-d2da-4fc1-8aab-debe8c54c50d"
|
|
|
|
[vars]
|
|
# Comma-separated list of origins allowed to POST signups.
|
|
# Override at deploy time with `wrangler secret put ALLOWED_ORIGINS` if you
|
|
# want to keep the value private.
|
|
ALLOWED_ORIGINS = "https://plannotator.ai,http://localhost:3002"
|
|
|
|
# Optional bearer token required to call GET /admin/list.
|
|
# Set with `wrangler secret put ADMIN_TOKEN`.
|
|
# ADMIN_TOKEN = ""
|
|
|
|
# Cloudflare Turnstile secret. When set, every /signup request must include a
|
|
# valid `turnstile_token` produced by the widget on the marketing page.
|
|
# Set with `wrangler secret put TURNSTILE_SECRET_KEY`. Pair this with the
|
|
# public sitekey baked into the marketing page via PUBLIC_TURNSTILE_SITEKEY.
|
|
# TURNSTILE_SECRET_KEY = ""
|