# Great Rift Valley Innovation Summit Marketing site for the [Great Rift Valley Innovation Summit](https://grvsummit.com/), built with Next.js App Router, TypeScript, Tailwind CSS, and [shadcn/ui](https://ui.shadcn.com/). ## Getting started ```bash npm install npm run download-assets # optional: refresh logos/speakers from grvsummit.com npm run dev ``` Open [http://localhost:3000](http://localhost:3000). ## Scripts | Command | Description | |---------|-------------| | `npm run dev` | Start dev server (Turbopack) | | `npm run build` | Production build | | `npm run start` | Start production server | | `npm run lint` | ESLint | | `npm run download-assets` | Download branding assets from official WordPress uploads | ## shadcn/ui Add components: ```bash npx shadcn@latest add ``` Config: [`components.json`](components.json). Theme tokens live in [`app/globals.css`](app/globals.css) (GRV navy `#1F3D7E`, gold `#FFB300`). ## Content Editable copy and data: [`content/`](content/). Images: [`public/branding/`](public/branding/). ## Inquiry API `POST /api/inquiry` accepts JSON with `intent` (`general` | `exhibitor` | `sponsor` | `sales` | `press` | `newsletter`), `name`, `email`, `message`, and optional `company` / `phone`. v1 logs to the server console only. To wire email (e.g. Resend), update [`app/api/inquiry/route.ts`](app/api/inquiry/route.ts) and set env vars from [`.env.example`](.env.example). ## Assets Logos and speaker cutouts are downloaded from the official site via `scripts/download-assets.mjs`. Confirm trademark and usage rights with EDTF before production deployment. ## Pages - `/` — Home - `/program` — Agenda - `/pitch-competition` — Grant competition - `/payment` — Ticket selection & checkout (API stub) - `/payment/success` — Order confirmation - `/exhibit` — Exhibitor inquiries - `/sponsor` — Sponsorship tiers - `/contact` — Contact channels & form ## Calendar - **Add to calendar** dropdown on the hero, tickets section, and payment page - **Google Calendar** / **Outlook** deep links - **`.ics` download** at [`/calendar`](app/calendar/route.ts) for Apple Calendar / iCal ## Payment API `POST /api/payment` accepts `ticketId`, `quantity`, `name`, `email`, `paymentMethod` (`card` | `bank`). v1 logs orders to the console; wire Stripe, Chapa, or similar for production. ## Deploy – Cloudflare Workers (OpenNext) This project is configured for [**OpenNext on Cloudflare**](https://opennext.js.org/cloudflare). ### One-time setup 1. Install deps: `npm install` 2. Authenticate Cloudflare: ```bash npx wrangler@4 login ``` Or export **`CLOUDFLARE_API_TOKEN`** and **`CLOUDFLARE_ACCOUNT_ID`**. 3. Set production env vars in Cloudflare Workers (or your CI): - `NEXT_PUBLIC_SITE_URL` (your production URL) ### Deploy now ```bash npm run deploy ``` Alias: ```bash npm run deploy:cf ``` ### Other useful commands ```bash npm run preview # build + local Workers preview runtime npm run upload # build + upload worker version (no immediate rollout) npm run cf-typegen # generate cloudflare-env.d.ts from wrangler bindings ``` ### CI (optional) Workflow file: [`.github/workflows/cloudflare-workers-opennext.yml`](.github/workflows/cloudflare-workers-opennext.yml) Add repo secrets: - `CLOUDFLARE_API_TOKEN` - `CLOUDFLARE_ACCOUNT_ID` ### Notes - OpenNext Cloudflare does **not** support `export const runtime = "edge"`; those exports were removed. - Build output is generated under **`.open-next/`** (gitignored).