1. Framework (Next.js and React)
I’ve been working with Next.js and React for a while now, and I’m most productive in these technologies. All my projects start with TypeScript for the added type safety and structure.
When it comes to data fetching, I lean towards using the latest React patterns:
- Mostly: Server Components for efficient server-side rendering.
- Occasionally: React hooks + Context for state management, Tanstack Query.
For forms, I leverage React 19 features like Server Actions and useActionState, alongside zod for type-safe object validation inside actions. But I still find myself, at times, using third-party libraries such as react-hook-form.
2. Styling (Tailwind CSS and shadcn/ui)
Building reusable and accessible components can be a challenge. That’s why I use shadcn/ui, which provides a well-designed set of extensible components. This helps me create flexible components without reinventing the wheel.
The styling? All handled with Tailwind CSS — a go-to for its efficiency and ability to colocate styles with markup. This makes it easier to work with code, especially when integrating AI tools.
3. Database (Laravel and MySQL)
For databases, MySQL is my default choice. And with Laravel, managing and creating APIs becomes effortless and enjoyable.
4. AI Tools (ChatGPT)
AI is a major part of my workflow. Whether it's for refactoring, debugging, or simply speeding up development, I rely on AI tools to save time and reduce manual effort. I use AI for tedious tasks like restructuring code, writing JSON, or suggesting improvements, especially when working with tools like Next.js and React.
While not perfect, AI is already a massive time-saver.
5. Coding Patterns
- Prefer
const
overlet
for consistency. - Split large files into many smaller, focused components.
- Colocate code that changes frequently.
- If an abstraction isn’t necessary, it’s better to copy/paste for clarity.