How to install, run,
and ship this site.
The marketing site is open source under MIT. The self-hosted agent runtime is in development. This page documents what exists today and what is planned, with no embellishment.
01
Install the marketing site
The marketing site is a Next.js 16 application. It needs Node 20+ or Bun, and an OpenRouter API key for the AI concierge widget. The site itself has no database, so install is two commands plus one environment variable.
Requires: Node 20+ or Bun 1.1+, an OpenRouter API key.
# 1. Clone the repository
git clone https://github.com/tangison/agent.git
cd agent
# 2. Install dependencies
bun install
# 3. Copy the env template and add your OpenRouter key
cp .env.example .env
# Edit .env: set OPENROUTER_API_KEY to your sk-or-v1-... key
# 4. Run the dev server
bun run dev
# 5. Open http://localhost:3000| Variable | Required | Purpose |
|---|---|---|
| OPENROUTER_API_KEY | Yes | Powers the AI concierge widget at the bottom of every page. |
| OPENROUTER_MODEL | No | Model ID. Defaults to openrouter/auto. |
| NEXT_PUBLIC_SITE_URL | No | Canonical site URL, used in sitemap and OG tags. |
| NEXT_PUBLIC_WHATSAPP_NUMBER | No | Waitlist target number. Defaults to the founder. |
| NEXT_PUBLIC_WHATSAPP_MESSAGE | No | Pre-filled waitlist message. |
02
Architecture of the marketing site
The site is a Next.js 16 App Router application with no SQL database and no user accounts. Pages are statically prerendered at build time. Two routes are dynamic: the OpenGraph image generator and the chat API. Both run on the Edge runtime for low cold-start latency.
The waitlist is a WhatsApp deep link, not a form. The concierge widget talks directly to the chat API, which streams a request to OpenRouter with a system prompt and returns the model reply. No conversation history is persisted server-side.
browser
│
▼
[Next.js 16 App Router]
│
├── / static prerender
├── /features static prerender
├── /pricing static prerender
├── /docs static prerender
├── /faq static prerender
├── /blog/* static prerender
├── /opengraph-image edge runtime, on-demand
└── /api/chat edge runtime, POST
│
▼
[OpenRouter]
│
▼
reply -> browser (no persistence)The planned Tangison Agent runtime, when it ships, will be a separate process. It will use a similar five-stage loop (intake, plan, dispatch, execute, reply) with an audit log written to local disk. That runtime is documented in MASTER-PLAN.md in the repository and is not part of this marketing site.
03
Chat API
The chat API is the only public endpoint on this site. It accepts a POST request with a messages array and returns a JSON reply. It is stateless: each call is independent and no conversation is stored.
Request
POST /api/chat
Content-Type: application/json
{
"messages": [
{ "role": "user", "content": "What is Tangison Agent?" }
]
}Response (200)
{
"reply": "Tangison Agent is a self-hosted AI workforce that runs inside your own infrastructure. Join the waitlist on WhatsApp: https://wa.me/264813411522"
}Response (503, no key configured)
{
"error": "OpenRouter API key is not configured.",
"reply": "The concierge is offline right now. Reach Tangi directly on WhatsApp: https://wa.me/264813411522"
}The system prompt instructs the model to be honest about what exists today versus what is planned. It refuses to invent features and points visitors to /docs, /faq, or WhatsApp when it does not know.
04
Deployment
The site is designed to run anywhere Next.js runs. The two supported targets are Vercel (zero config) and a Docker container (for self-hosting behind your own firewall). Both targets use the same environment variables documented above.
Vercel
Push the repo to GitHub, import it into Vercel, set the OPENROUTER_API_KEY environment variable, deploy. Framework is auto-detected as Next.js.
# CLI alternative
npm i -g vercel
vercel link
vercel env add OPENROUTER_API_KEY
vercel --prodDocker (self-host)
The Next.js standalone output in next.config.ts produces a minimal server image. Build, run, and put it behind your own reverse proxy.
# Build
bun run build
# Run the standalone server
node .next/standalone/server.js
# Or with Docker (write your own Dockerfile)
docker build -t tangison-agent .
docker run -p 3000:3000 \
-e OPENROUTER_API_KEY=sk-or-v1-... \
tangison-agentNote: a production-ready Dockerfile is not in the repo yet. The standalone server works; the Dockerfile is on the roadmap. Use Vercel for the simplest path today.
05
Roadmap for the agent runtime
The Tangison Agent runtime is the actual self-hosted agent product. It does not exist yet. The marketing site you are reading is the only thing that ships today. The roadmap below describes what is planned, not what is delivered.
| Component | Status | Description |
|---|---|---|
| Agent runtime | Planned | The five-stage loop: intake, plan, dispatch, execute, reply. Writes every step to an append-only audit log. |
| web_search skill | Planned | Search the public web via OpenRouter tool calling. |
| read_write_files skill | Planned | Read, write, list files inside a sandboxed workspace. |
| run_code skill | Planned | Execute TypeScript or Python in a sandboxed runtime. |
| fetch_url skill | Planned | Issue HTTP requests with a configurable byte limit. |
| vercel_deploy skill | Planned | Trigger a Vercel deployment, return preview URL. |
| send_message skill | Planned | Deliver a message to Telegram, WhatsApp, or the web dashboard. |
| mcp_connector skill | Planned | Bridge to any Model Context Protocol server as a skill. |
| Production Dockerfile | Planned | Reproducible signed appliance image for self-hosting. |
The full design document is MASTER-PLAN.md in the repository. It is updated as the build progresses. There is no public release date yet.
06
Contributing
The repository accepts issues and pull requests on GitHub. For bugs in the marketing site, open an issue with a reproduction. For feature requests, describe the use case before proposing a solution. For roadmap questions, the FAQ page is the right place to start.
# Fork the repo on GitHub, then:
git clone https://github.com/YOUR_USERNAME/agent.git
cd agent
bun install
bun run dev
# Make your changes, then:
bun run lint
bun run build
# Push and open a pull request against mainBefore you open a PR
- Lint must pass:
bun run lint - Build must pass:
bun run build - No em dashes anywhere. Use regular hyphens or commas.
- No fabricated statistics, testimonials, or feature claims.
- If something is planned and not yet shipped, say so in the copy.
Want to ship the agent, not just the site?
The agent runtime is in development. Join the waitlist and you will hear from Tangi directly when the first build is ready to test.