A random tech topic generator to fuel a daily blog-writing habit. Hit spin, get a topic pulled from a curated bank spanning frontend, backend, databases, infra, testing, AI, and more — then go read up and write about it.
No login. No history. No tracking. Just an honest random topic generator.
DevSpin holds a bank of topics in Postgres, built by crossing technologies (React, PostgreSQL, Docker, etc.) with concepts (caching, testing, load balancing, etc.) within matching domains, plus a set of standalone systems-design topics (CAP Theorem, Microservices, OAuth 2.0, and similar). Every spin is a fully random pick from the whole bank.
- Framework: Next.js (App Router, Server Actions)
- Database: PostgreSQL via Neon
- ORM: Drizzle
- Styling: Tailwind CSS
- Language: TypeScript
git clone https://github.com/rhittik12/devspin.git
cd devspin
npm installCreate a free project at neon.tech and grab your connection string.
Copy .env.example to .env.local and add it:
DATABASE_URL=your-neon-connection-string
npx drizzle-kit pushThis creates the topics table in your database.
npm run seedThis populates topics from scripts/data/technologies.ts, concepts.ts, and standalone-topics.ts.
npm run devOpen localhost:3000 and hit spin.
app/
page.tsx # Home - spin button + topic card
actions/spin.ts # Server action that picks a random topic
layout.tsx
components/
topic-card.tsx # Displays the current topic
spin-button.tsx
ui/ # Button, badge primitives
db/
schema.ts # Drizzle table definition
index.ts # DB connection
queries/topics.ts # getRandomTopic query
scripts/
seed.ts # Seeds the topic bank
data/ # Raw technology/concept/standalone lists
lib/
types.ts # Shared Topic type
Contributions are welcome — this is a small project and a good one to get your feet wet with Next.js, Drizzle, or just adding more topics.
1. Grow the topic bank (easiest way to contribute)
Add more entries to scripts/data/technologies.ts, concepts.ts, or standalone-topics.ts, then run npm run seed locally to confirm it generates sensible topics before opening a PR. Keep the domain tags consistent with the existing entries — a technology and a concept only get crossed together if they share a domain, so mismatched tags produce topics that never get generated.
2. Improve the product
Have an idea for how DevSpin could be better — UI, performance, features, code quality, anything? Just raise a PR for it.
To contribute code:
- Fork the repo
- Create a branch:
git checkout -b feature/your-feature-name - Make your changes
- Commit:
git commit -m "Add: short description" - Push:
git push origin feature/your-feature-name - Open a pull request
Please keep PRs focused — one change per PR is easier to review than a bundle of unrelated changes.
MIT — see LICENSE.