79 lines
2.9 KiB
Markdown
79 lines
2.9 KiB
Markdown
# Medscribe Web
|
||
|
||
Public product website for [Medscribe](../README.md) — a privacy-first,
|
||
on-device medical companion in internal beta on iOS and Android.
|
||
|
||
Built with [create-t3-app](https://create.t3.gg/) (Next.js + TypeScript +
|
||
Tailwind). There is no product database or beta-form backend.
|
||
|
||
Uses **bun** exclusively (`bun.lock`).
|
||
|
||
## Development
|
||
|
||
```bash
|
||
bun install
|
||
bun run dev
|
||
```
|
||
|
||
Open [http://localhost:3000](http://localhost:3000).
|
||
|
||
## Routes
|
||
|
||
The first public product slice includes:
|
||
|
||
- `/` — consumer-first portable-context story
|
||
- `/how-it-works` — inputs, review loop, medication maintenance, and handoff
|
||
- `/privacy` — data map, sharing limitations, and evidence boundaries
|
||
- `/beta` — expectations and a health-data-free email request
|
||
|
||
Named partner print material remains isolated and excluded from search:
|
||
|
||
- `/briefs/northwell`
|
||
- `/cvs`
|
||
- `/walgreens`
|
||
|
||
`/executive-summary` and `/landscape` remain retired/internal and are also
|
||
excluded from search. `SITE_PASSWORD` still gates the entire site when set; a
|
||
future pass should make protection route-specific before the public site is
|
||
deployed alongside private briefs.
|
||
|
||
### Analytics (optional)
|
||
|
||
Set in `.env` (see `.env.example`):
|
||
|
||
- `NEXT_PUBLIC_UMAMI_WEBSITE_ID` — website UUID from your Umami dashboard
|
||
- `NEXT_PUBLIC_UMAMI_SCRIPT_URL` — optional; defaults to `https://cloud.umami.is/script.js` (use your self-hosted URL if needed)
|
||
|
||
Leave the website ID unset to disable tracking (default for local dev).
|
||
|
||
## Build
|
||
|
||
```bash
|
||
bun run build
|
||
bun run start
|
||
```
|
||
|
||
Screenshots live in `public/screenshots/`. Every route uses the same fresh,
|
||
precomposited iPhone product-bezel assets in
|
||
`public/screenshots/product-bezel-2026-08-20/`; there are no raw or CSS-framed
|
||
product captures in the rendered site. The versioned path keeps newly captured
|
||
UI from being hidden by stale browser or image-optimizer caches.
|
||
Public pages label product imagery as synthetic demo data and beta UI.
|
||
|
||
### Capturing raw screenshots for the site
|
||
|
||
Export **in-app content only** from the simulator or device — no simulator chrome or macOS capture toolbar. A normal in-app status bar/tab bar is fine.
|
||
|
||
1. Run the app on **iPhone 17 Pro** (or 16 Pro) simulator or device, or on an **Android** emulator/device.
|
||
2. Capture each screen (⌘S in Simulator saves to Desktop; `adb exec-out screencap -p` on Android).
|
||
3. Composite each 1206 × 2622 PNG into a 1350 × 2760 product bezel at offset
|
||
`+72+69`, export the transparent WebP, and update the shared versioned asset
|
||
directory referenced by the routes.
|
||
|
||
Product images are composited at the bezel source size of 1350 × 2760 with
|
||
transparent backgrounds and rendered responsively through
|
||
`src/components/product-device.tsx`; the smaller `PhoneMockup` wrapper reuses
|
||
that same component. The homepage uses CSS view timelines for
|
||
scroll-scrubbed device and chapter motion on desktop and mobile, with a static
|
||
fallback and a reduced-motion override.
|