1> Runtime acceptance is pending the Neon deployment and browser checks; this example is not yet verified on Neon.
2
3# Neon Website: Waku
4
5Deploys a real Waku application with `Neon.Website.Waku`.
6
7A dynamic React Server Component reads `GREETING` with `getEnv`. A client counter hydrates independently; `/about` is static.
8
9## Infrastructure
10
11`alchemy.run.ts` uses `Neon.providers()` and `Alchemy.localState()`.
12The helper uses the application root by default. Live deployments without explicit
13scope own a Neon Project in Ohio (`aws-us-east-2`), including its normal default
14database, and a Node 24 Function. The app does not query that database.
15No Docker daemon, container registry, or other cloud provider is used.
16Pass an existing `project` or `branch` to reuse it without transferring ownership.
17
18The workspace supplies `alchemy` and `@alchemy.run/frontend-frameworks` through
19`workspace:*` dependencies. `@vercel/nft` is installed for Neon artifact tracing.
20Install dependencies from the repository root before
21running commands in this directory. Authenticate Neon using the Alchemy profile
22you intend to deploy with.
23
24## Deploy
25
26```sh
27bun run deploy --profile testing
28```
29
30The stack returns `url`. Framework configuration, application sources, and public
31assets are included in this example; the Website helper owns the deployment adapter.
32
33## Develop
34
35```sh
36bun run dev
37```
38
39This runs the native framework dev server without creating an implicit Website-owned
40Neon backend. Explicit backend resources remain live resources. Apply
41`Alchemy.remote()` to the Website Effect to deploy a real Function during dev.
42Cloud-only `function` and `domain` outputs are absent locally.
43
44## Verify
45
46```sh
47ALCHEMY_PROFILE=testing bun test test/integ.test.ts
48```
49
50The integration suite destroys previous stack state, deploys the actual app,
51requests its page, verifies the static JSON asset, and destroys the stack.
52Set `NO_DESTROY=1` only when intentionally keeping the deployment for inspection.
53
54For browser validation, open the returned URL. Click **count: 0**; it becomes **count: 1**.
55Every app also serves `/example.json` with a framework label and greeting.
56
57## Destroy
58
59```sh
60bun run destroy --profile testing
61```
62
63## Packaging and security
64
65The Function receives a deterministic ZIP with a root Fetch `index.mjs`; it is not a
66listening server or S3 website. Runtime dependencies are traced with `@vercel/nft`.
67Only traced pnpm dependency files are materialized, with Node 24 resolution hooks
68preserving canonical package identity. Native addons require Linux/Node 24 validation
69and are currently rejected. `.env` files, credential files, and source maps are excluded.
70
71Framework public environment prefixes are intentionally browser-visible. Keep secrets
72out of those variables; `Redacted` protects infrastructure output, not arbitrary
73framework build-time substitution. Never put `NEON_API_KEY` in Website `env`.
74
75Optional `domain` registers a custom hostname and returns `domain.cnameTarget`.
76Publish a DNS-only CNAME and verify HTTPS independently; registration is not proof
77of certificate readiness. Functions have public URLs, so authenticate private
78application routes in the handler.