A curated collection of posts and tools for creative coders and technologists.
Whether you're just starting out or you've been doing this for years, contributions are welcome. Add a tool, write a post, or improve the codebase.
- Node.js 18+ or pnpm 10+
- Git
# Clone the repository
git clone https://github.com/jonothanhunt/creative-tech-stack.git
cd creative-tech-stack
# Install dependencies
npm install
# or
pnpm install
# Start the development server
npm run dev
# or
pnpm devOpen http://localhost:3000 and you're good to go.
Adding a tool
Tools live in a TypeScript file. No database needed.
-
Open
app/data/tools.ts -
Add your tool to the
toolsarray:
{
"name": "Your Amazing Tool",
"description": "What it does and why it matters.",
"image": "/images/tools/your-tool.png", // Add your image to public/images/tools/
"type": "Tool", // Options: Tool, Library, Platform, Framework, Engine, API, etc.
"categories": ["Creative Coding", "Real-time 3D"], // Pick from existing categories
"stacks": ["WebGL", "JavaScript", "3D"], // Add relevant tech tags
"featured": false, // Set to true if it's exceptional
"links": [
{
"title": "Website",
"url": "https://yourtool.com"
},
{
"title": "Docs",
"url": "https://docs.yourtool.com"
}
]
}Tip: Check existing tools in tools.ts for reference. Keep descriptions under 150 characters.
-
Add an image (optional but recommended):
- Place a screenshot or logo in
public/images/tools/ - Name it using kebab-case:
your-tool-name.png - Recommended size: 1200x900px (4:3 aspect ratio)
- Place a screenshot or logo in
-
Submit a pull request:
# Fork the repository on GitHub, then clone your fork
git clone https://github.com/YOUR-USERNAME/creative-tech-stack.git
cd creative-tech-stack
# Create a new branch
git checkout -b add-your-tool-name
# Make your changes, then commit
git add .
git commit -m "Add Your Tool Name"
# Push to your fork
git push origin add-your-tool-nameThen open a pull request from your fork to the main repository.
Writing a blog post
Posts are written in MDX (Markdown + React components).
- Create a new file in
posts/:
posts/my-awesome-article.mdxTip: Check out this example post to see how it works.
- Add frontmatter at the top:
---
title: "My Awesome Article Title"
date: "2026-01-12"
description: "A compelling summary that appears in previews and SEO."
image: "/images/posts/my-awesome-article/hero.png"
author: "Your Name"
---- Write your content using Markdown:
## Introduction
Your content here...
### Subheading
More insights...- Use custom components (optional):
<YouTubeEmbed url="https://youtube.com/watch?v=..." />
<VimeoEmbed url="https://vimeo.com/..." />
<LinkedInEmbed url="https://linkedin.com/embed/..." />
> 💡 **Pro Tip:** You can also use simple blockquote syntax for info blocks!-
Add images for your post:
- Create a folder:
public/images/posts/my-awesome-article/ - Add your images there
- Reference them:

- Create a folder:
-
Submit a pull request
Note: MDX lets you use React components directly in Markdown. See the MDX docs for more.
Advanced: adding new MDX components
Want to create a new reusable component for posts?
- Create the component in
components/:
// components/MyCustomComponent.tsx
export default function MyCustomComponent({ children }: { children: React.ReactNode }) {
return (
<div className="my-custom-styling">
{children}
</div>
);
}- Export it from
mdx-components.tsx:
import MyCustomComponent from '@/components/MyCustomComponent';
export function useMDXComponents(components: MDXComponents): MDXComponents {
return {
...components,
MyCustomComponent,
};
}- Use it in any MDX file:
<MyCustomComponent>
Your content here
</MyCustomComponent>creative-tech-stack/
├── app/
│ ├── data/
│ │ └── tools.ts # Tools database
│ ├── tools/ # Tools page
│ ├── newsletter/ # Blog/newsletter pages
│ └── layout.tsx # Root layout
├── components/ # Reusable React components
│ ├── YouTubeEmbed.tsx
│ ├── VimeoEmbed.tsx
│ ├── InfoBlock.tsx
│ └── ...
├── posts/ # MDX blog posts
├── public/
│ └── images/
│ ├── tools/ # Tool images
│ └── posts/ # Blog post images
├── lib/ # Utility functions
└── mdx-components.tsx # MDX component registry
- Framework: Next.js 15 with App Router
- Language: TypeScript 5
- Styling: Tailwind CSS 4
- Content: MDX 3 for blog posts
- 3D Graphics: React Three Fiber + Three.js
- Animations: Motion
- Icons: React Icons
- Deployment: Vercel
npm run dev # Start dev server with Turbopack
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLintMIT License - see the LICENSE file for details.
- Website: creativetechstack.dev
- GitHub: @jonothanhunt
- Issues: Report a bug or request a feature
