118 lines
3.5 KiB
Markdown
118 lines
3.5 KiB
Markdown
# 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 <component>
|
||
```
|
||
|
||
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).
|
||
|