The public marketing site for Gitvoice — an open-source Cloudflare Worker that turns GitHub activity into clear, client-ready invoices.
Live: https://gitvoice.dev (static export, Cloudflare Workers assets) · Product: https://invoicer-pro.ideatorx.workers.dev/ · CLI: curl -fsSL https://invoicer-pro.ideatorx.workers.dev/agent-cli/gitvoice-agent.py -o gitvoice-agent.py
| Repo | Purpose |
|---|---|
| Product — https://github.com/idea-torx/gitvoice | Worker, D1/R2/Browser Rendering, admin + portal, agent CLI |
| Marketing site — https://github.com/idea-torx/gitvoice-site | This repo — static Next.js export |
| Production app | https://invoicer-pro.ideatorx.workers.dev/ |
- GitHub-activity → invoice workflow (week / month / custom range)
- Outcome-ranked summaries, timelines, highlights, and detailed activity logs
- Hourly and flat-fee billing in one workspace; payment method printed on the invoice
- Private operator workspace + password-protected client portal (PBKDF2, 7-day signed links, no accounts)
- Zero-dependency agent CLI for Claude Code / Codex / OpenCode / Hermes / plain terminal
- Fully open source, runs in your own Cloudflare account
| Layer | Choice |
|---|---|
| Framework | Next.js 15 (App Router, output: "export") |
| Language | TypeScript 5.8 (strict) |
| Styling | Tailwind CSS 4 + prettier-plugin-tailwindcss |
| Auth / DB scaffold | next-auth 5 (beta) + Prisma 6 + tRPC 11 (retained from T3, static page does not require DB at runtime) |
| Deploy | Cloudflare Workers static assets (wrangler.jsonc → out/) |
| Fonts | Geist + Geist Mono + Space Grotesk (next/font/google) |
npm install
npm run dev # → http://localhost:3000 (Turbopack)Production-style preview (static export):
npm run preview # next build && next start
# or just:
npm run build # writes `out/` for wranglerThe site is a fully static export — no server, no DB needed at runtime. next.config.js: output: "export" writes out/, served via Workers assets.
npm install
npm run build # → out/
npx wrangler deploywrangler.jsonc:
Keep .env*, .wrangler/, .next/, out/ gitignored. The deployment environment provides the Cloudflare account context (OAuth or CLOUDFLARE_API_TOKEN + CLOUDFLARE_ACCOUNT_ID). Custom domain gitvoice.dev is bound via Cloudflare dashboard — separate from this repo.
npm run build # static export must succeed
npm run typecheck # tsc --noEmit
npm run lint # next lint
npm run format:check # prettier
# or all at once:
npm run check # lint + typecheckCI should run build + typecheck + format:check on push/PR to main.
src/
app/
page.tsx # single landing page (story, steps, agent CLI, FAQ)
layout.tsx # metadata + fonts + ScrollFX + noscript fallback
_components/ # site-nav, scroll-story, animated-stat, logo, marquee, etc.
icon.svg # favicon source
styles/globals.css
server/ # auth/db/trpc scaffold (from T3, not used by static export)
public/favicon.ico
next.config.js # output: "export"
wrangler.jsonc # Workers assets config
- Copy & tone lives in
src/app/page.tsx(STORY,STEPS,AGENT_CAPABILITIES,FAQ_ITEMS,STATS). - Global styles in
src/styles/globals.css. - Nav links in
src/app/_components/site-nav.tsx. - Metadata / OG in
src/app/layout.tsx(metadata+viewport).
- Both repos are public and contain no production credentials.
- The product README (
idea-torx/gitvoice) is the source of truth for Worker, D1/R2, Browser Rendering, agent CLI, onboarding, and portal docs. - This repo's job is only the marketing surface — keep it static, keep it fast.
See CONTRIBUTING.md in the product repo for general guidelines. For this site: run npm run build && npm run typecheck && npm run format:check before opening a PR, and don't commit out/ or .wrangler/.
MIT — same as the product. See https://github.com/idea-torx/gitvoice/blob/main/LICENSE.
{ "name": "gitvoice-site", "assets": { "directory": "./out", "html_handling": "auto-trailing-slash", "not_found_handling": "404-page" } }