osmon designs, builds, and operates agent systems for the teams
shipping the next decade of software.
osmon.io · hello@osmon.io · @osmonlab
This is the source for osmon.io — the public face of osmon, an agentic software studio based out of Tashkent and shipping remote-first across Europe and North America.
It is a small, intentionally restrained Next.js 16 site: a home, a journal, a list of selected work, an about, and a way to get in touch. Pure static at the edge.
Read-only showcase. Issues are welcome; external pull requests will be closed politely. The repo exists as a public artefact of the studio’s craft, not as a project to collaborate on.
- Next.js 16 — App Router, Turbopack, RSC, Cache Components-ready
- React 19 + TypeScript strict
- Tailwind CSS v4 with
@themedesign tokens (notailwind.config.*) - Geist Sans · Geist Mono · Newsreader via
next/font/google - Phosphor Icons (per the studio’s design rules)
- bun for installs and scripts
- Cloudflare Workers for hosting via
@opennextjs/cloudflare
bun install
bun dev # http://localhost:3000That’s it. No environment variables. No external services. The dev server serves the same static output that Cloudflare ships in production.
| Command | Purpose |
|---|---|
bun dev |
Local dev server (Turbopack) |
bun run build |
Production build — runs tsc and prerenders all 16 routes |
bun run typecheck |
tsc --noEmit |
bun run cf:build |
Build the OpenNext Worker bundle locally |
bun run cf:preview |
Run the Worker bundle on localhost:8787 (production parity) |
bun run cf:deploy |
Build + deploy to Cloudflare Workers |
bun run cf:typegen |
Regenerate cloudflare-env.d.ts from wrangler.jsonc bindings |
app/
layout.tsx Nav, Footer, fonts, metadata
page.tsx Home — hero, manifesto, capabilities, CTA
work/ Selected case studies
about/ Studio + principles
journal/ Index + [slug] entries (draft stub fallback)
contact/ Email channels + form
icon.tsx Favicon (ImageResponse)
opengraph-image.tsx Social OG card (1200×630)
sitemap.ts, robots.ts SEO plumbing
not-found.tsx Branded 404
components/
nav.tsx Floating capsule, scroll-aware, ⌘K trigger
command-menu.tsx Full keyboard-driven palette
hero, manifesto,
capabilities, Home sections
cta-footer
page-header.tsx Eyebrow + display headline + lede (sub-pages)
reveal.tsx IntersectionObserver fade-up — only motion primitive
footer.tsx, wordmark.tsx
lib/cn.ts className join helper
Every route is statically generated. 16 prerendered pages at build time, including five journal entries (two fully written, three rendering a typography-correct draft stub).
#3DA8FFis accent only. Fails AA on white as text (~2.8:1). Used for ambient blur, hover, focus ring, pill background, or paired withtext-sky-deep(#1F6C9F) onbg-sky-pale.- White canvas,
text-ink(#0B0F14),border-line(#EAEAEA) hairlines. Maximum one shadow tier (0 2px 8px rgba(0,0,0,0.04)). - Geist for UI and body. Newsreader italic for display emphasis. Mono is reserved for eyebrows,
<kbd>chips, and metadata. - Every
<Reveal>-wrapped block staggers viadelay={i * 80}. No mass mounts.
Deployed on Cloudflare Workers via OpenNext. The repo is wired to CF Workers Builds — every push to main triggers an auto-deploy.
| Resource | Detail |
|---|---|
| Production | osmon.io |
| Worker URL | osmon-io.osmonlab.workers.dev |
| Build adapter | @opennextjs/cloudflare@^1.19 |
| Wrangler config | wrangler.jsonc |
| Compatibility date | 2026-05-01, flag nodejs_compat |
MIT · © 2026 Osmon Lab.
Built by the studio. Hire us if you’re shipping into the next decade.