A curated collection of developer utilities built with Next.js 16, TailwindCSS, and a distinctive terminal-inspired design system.
This project follows strict engineering principles:
- Colors: Background
#0a0a0a, Surfaces#111111, Borders1px solid #222222 - Typography: Inter (sans-serif) for UI, JetBrains Mono (monospace) for code
- Accent: Blue-violet
#5b6af0for CTAs and badges - Zero tolerance: No border-radius, no shadows, no illustrations
- Layout: Centered at 1200px max-width with generous vertical padding
- Animations: Minimal opacity + translateY transitions
npm install
npm run devOpen http://localhost:3000 to see the portal.
terminal-tools-portal/
├── app/
│ ├── tools/
│ │ ├── # Every tool is placed here
│ ├── layout.tsx
│ ├── page.tsx # Homepage with tool listing
│ └── globals.css
├── components/
│ └── ui/ # 23 reusable UI components
└── data/
└── tools.ts # Tool definitions
All components are built with reusability in mind. Import from @/components/ui.
Centered wrapper with max-width 1200px.
<Container>...</Container>Surface container with border and background.
<Box className="p-6">...</Box>Responsive grid layout with configurable columns.
<Grid cols={3}>...</Grid>Flexbox helpers for horizontal/vertical layouts.
<Row className="gap-4">...</Row>
<Column>...</Column>Section wrapper with optional title and top divider.
<Section title="most famous">...</Section>Minimalist header bar with bottom border.
<Header>...</Header>Heading component (h1-h6) with white color and sans-serif font.
<Title level={1}>Tools Portal</Title>
<Title level={2} className="mb-4">Subtitle</Title>Body text in #cccccc with optional accent/muted variants.
<Text>Default body text</Text>
<Text accent>Accent colored</Text>
<Text muted>Subdued text</Text>
<Text code>monospace code</Text>Small label with accent background for tags like "NEW" or "MOST FAMOUS".
<Badge>NEW</Badge>
<Badge accent>FEATURED</Badge>Underlined text for keywords and links.
<Tag>keyword</Tag>
<Tag accent>highlighted</Tag>Primary action button with accent hover state.
<Button onClick={handleClick}>Click me</Button>
<Button href="/tools">Link button</Button>
<Button disabled>Disabled</Button>Text input with border and focus states.
<Input value={value} onChange={setValue} placeholder="Type..." />
<Input type="number" value={num} onChange={setNum} />Dropdown selector with custom styling.
<Select
value={sortBy}
onChange={setSortBy}
options={[
{ value: 'name', label: 'Name' },
{ value: 'date', label: 'Date' },
]}
/>Form label with consistent styling.
<Label>Username</Label>Text link with accent hover effect.
<Link href="/tools">Go to tools</Link>
<Link href="/about" blue>Blue link</Link>Horizontal rule with border color.
<Divider />
<Divider className="my-8" />Tool card with icon, title, description, and badges.
<Card
title="JSON Formatter"
description="Format and validate JSON"
icon="{}"
href="/tools/json"
badges={[{ text: 'NEW', accent: true }]}
/>Unordered list with border-separated items.
<List>
<ListItem>Item 1</ListItem>
<ListItem>Item 2</ListItem>
</List>Data table with headers and rows.
<Table
headers={['Name', 'Value']}
rows={[['Key', 'Value']]}
/>Monospace icon wrapper.
<Icon>{ }</Icon>Vertical spacing with predefined sizes.
<Spacer size="sm" /> // 16px
<Spacer size="md" /> // 32px
<Spacer size="lg" /> // 64px
<Spacer size="xl" /> // 128pxHorizontal progress bar with accent fill.
<Progress value={75} max={100} />We encourage contributions! This project is designed for developers who appreciate clean, minimal interfaces and powerful tools.
- Fork the repository
- Create a feature branch
git checkout -b feature/my-new-tool
- Add your tool following the existing patterns:
- Create a new folder in
app/tools/your-tool/ - Use the UI components from
@/components/ui - Follow the design system (no rounded corners, no shadows)
- Use monospace only for code fragments
- Create a new folder in
- Update
data/tools.tsto include your tool in the listing - Test your implementation
npm run build # Ensure no TypeScript errors npm run dev # Test manually
- Submit a pull request with a clear description
- Design: Maintain the terminal aesthetic - no rounded corners, no shadows, no illustrations
- Colors: Use only the defined palette (
--bg-base,--bg-surface,--border-color,--accent) - Components: Reuse existing UI components when possible
- TypeScript: Ensure full type safety
- English only: All UI text must be in English
- Code style: Use Tailwind utilities, avoid inline styles (except for dynamic colors)
-
Create the page file:
mkdir -p app/tools/my-tool touch app/tools/my-tool/page.tsx
-
Use this template:
'use client'; import { Container } from '@/components/ui/Container'; import { Title } from '@/components/ui/Title'; import { Text } from '@/components/ui/Text'; import { Box } from '@/components/ui/Box'; import { Button } from '@/components/ui/Button'; import { Badge } from '@/components/ui/Badge'; import { Divider } from '@/components/ui/Divider'; export default function MyToolPage() { return ( <main className="min-h-screen py-12"> <Container> <div className="mb-8"> <Badge accent>YOUR-CATEGORY</Badge> </div> <Title level={1} className="mb-4">Tool Name</Title> <Text muted className="mb-8">Tool description</Text> <Divider className="mb-12" /> {/* Your tool implementation */} </Container> </main> ); }
-
Add to
data/tools.ts:{ id: '6', title: 'My Tool', description: 'Description of my tool', icon: 'IC', href: '/tools/my-tool', badges: [{ text: 'NEW', color: 'green' }], category: 'Category', }
MIT License - feel free to use this project for your own tools portal.
Built with:
- Next.js 16 - React framework
- TailwindCSS - Utility-first CSS
- Inter - Sans-serif typography
- JetBrains Mono - Monospace for code
No rounded corners were harmed in the making of this UI