Turn any website into a terminal-first ANSI experience (
curl yoursite.com).
Built for Cloudflare Workers, Node.js, Bun, and Docker. Zero heavy runtime dependencies.
Vibecoded with ❤️ by Mickhat (@mickhat)
______ __ __ ____ ______ __ __
/_ __/ / / / / / _/ / ____/ \ \/ /
/ / / / / / / / / /_ \ /
/ / / /_/ / _/ / / __/ / /
/_/ \____/ /___/ /_/ /_/
Ultra-fast edge gateway • Universal web-to-terminal engine
v0.1.0 TypeScript Edge-Native MIT by @mickhat
tuify lets anyone create a terminal interface for their website with a single command:
- Regular Visitors (Chrome, Safari, Firefox): See your normal website without any delay or change.
- Terminal Users (
curl,wget,httpie, PowerShell): Receive a lightning-fast, beautifully rendered ANSI terminal interface with ASCII banners, live feature tables, code boxes, and reader views!
Works for any type of website:
- 🏢 SaaS & Product Landing Pages: Live pricing tables, architecture overviews, quickstart install commands.
- 👤 Portfolios & Resumes: Bio, projects, skills, tech stack badges, and contact info.
- 📚 Developer Docs & Tools: API references, CLI commands, and boxed code snippets.
- 📰 Blogs & Publications: Live RSS/Atom/JSON feed reader, article search, and terminal reader mode.
Run the interactive setup wizard with your website URL:
npx @mickhat/tuify init https://example.comThe wizard will:
- 🔍 Inspect your website: Discovers title, tagline, nav links, feeds, and socials.
- 🎨 Prompt for design preferences: Select an ASCII banner font and one of 7 brand-neutral color themes.
- 📦 Scaffold your project: Generates
tuify.config.ts, edge worker handlers, and local test scripts.
npm run dev
# or
npx tuify devIn another terminal, test with curl:
curl http://localhost:8787/
curl http://localhost:8787/pricing
curl http://localhost:8787/aboutTip: Append ?no-color=1 to test raw unstyled plain text for scripting or piping to less.
tuify ships with 100% brand-neutral, high-contrast terminal palettes:
| Theme | Key Accents | Aesthetic |
|---|---|---|
emerald (Default) |
Emerald Green (#10b981) + Cyan (#06b6d4) |
Modern, clean tech terminal |
tokyo-night |
Indigo (#7aa2f7) + Lavender Violet (#bb9af7) |
Modern IDE vibe |
nord |
Arctic Frost Blue (#88c0d0) + Snow White |
Calm, elegant Scandinavian |
dracula |
Dracula Purple (#bd93f9) + Neon Pink (#ff79c6) |
High-contrast dark theme |
amber |
Monochrome CRT Gold (#ffb000) |
1980s retro mainframe |
matrix |
Phosphor Green (#00ff66) |
Classic UNIX shell |
minimal |
Crisp White (#ffffff) + Slate Gray |
Black & white monochrome |
Everything is configured via a type-safe tuify.config.ts file.
import { defineConfig } from 'tuify';
export default defineConfig({
site: {
name: 'Veloce',
tagline: 'High-performance distributed database for edge workers',
originUrl: 'https://veloce.dev',
},
theme: {
preset: 'emerald',
banner: { text: 'VELOCE', font: 'slant' },
badges: ['v2.1.0', 'Apache-2.0', 'Zero-Config'],
},
routes: {
home: {
intro: 'Ultra-low latency key-value engine with multi-region replication.',
highlights: [
{ label: 'Sub-1ms Latency', desc: 'Queries resolved globally in under 1ms' },
{ label: 'Edge Native', desc: 'Embeds directly inside V8 isolates without TCP overhead' },
],
customCommands: [
{ cmd: 'curl veloce.dev/features', desc: 'Architecture & technical specifications' },
{ cmd: 'curl veloce.dev/pricing', desc: 'Free, Pro, and Enterprise tiers' },
],
},
pages: [
{
path: '/pricing',
title: 'Pricing & Resource Limits',
table: {
headers: ['Tier', 'Requests/Mo', 'Storage', 'Price'],
rows: [
['Free', '100,000', '1 GB', '$0 / mo'],
['Pro', '10,000,000', '50 GB', '$29 / mo'],
['Enterprise', 'Unlimited', 'Dedicated', 'Custom'],
],
},
},
{
path: '/features',
title: 'Engine Architecture',
fetchFrom: 'https://veloce.dev/features', // Dynamically fetches and converts HTML to terminal!
},
],
socials: {
github: 'veloce-db',
discord: 'https://discord.gg/veloce',
email: 'team@veloce.dev',
},
},
});import { defineConfig } from 'tuify';
export default defineConfig({
site: {
name: 'Alex Rivera',
tagline: 'Systems engineer & open-source contributor',
originUrl: 'https://alexrivera.dev',
feedUrl: 'https://alexrivera.dev/atom.xml', // RSS, Atom, or JSON Feed
},
theme: {
preset: 'nord',
banner: { text: 'ALEX', font: 'slant' },
badges: ['Linux', 'Rust', 'Go'],
},
routes: {
home: {
recentPostsLimit: 5,
},
blog: {
enabled: true,
articlePrefix: '/blog', // curl alexrivera.dev/blog/<slug>
},
socials: {
github: 'alexrivera',
bluesky: 'alex.bsky.social',
},
},
});Free edge hosting across 300+ global locations with <1ms cold start.
- Configure your custom domain in
wrangler.toml:
name = "my-site-cli"
main = "src/index.ts"
compatibility_date = "2024-08-01"
routes = [
{ pattern = "example.com/*", zone_name = "example.com" }
]- Deploy:
npx wrangler deployNote: Because the worker passes through non-CLI requests (
fetch(request)), your existing website hosting remains completely untouched!
For self-hosters and VPS servers running behind Nginx, Caddy, or Traefik:
import { createTuifyServer } from 'tuify';
import config from './tuify.config.js';
const server = createTuifyServer(config, 8787);
server.listen(8787);Or run directly with Docker:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 8787
CMD ["node", "dist/src/index.js"]| Command | Description |
|---|---|
npx @mickhat/tuify init [url] |
Scrape website metadata and scaffold project |
npx @mickhat/tuify dev [port] |
Start local development server (default: 8787) |
npx @mickhat/tuify preview |
Print terminal homepage output directly to stdout |
npx @mickhat/tuify help |
Show CLI help and options |
# Run unit test suite
npm test
# Run terminal simulation
npm run test:cliMIT License © 2026 Mickhat (mickhat.xyz • GitHub: @mickhat)
Vibecoded with love by Mickhat.
0 comments
log in to comment.