Skills & Tech Stack
An overview of the technologies and tools I use every day as a freelance full-stack web developer. I've grouped them by category to give a clear picture of how I handle a project end-to-end: from frontend and backend development to design, from versioning to production deployment.
This is not an exhaustive list of everything I've touched over the years, but a real snapshot of my current stack and what I bring to client projects.
Development
Frontend
On the frontend I work mainly with Next.js and React, always writing in TypeScript to keep my code solid, type-safe and maintainable over time.
My default styling stack is Tailwind CSS paired with ShadCN/UI, which lets me start from accessible, well-structured components and customize them without being locked into an imposed design system.
When an interface needs a richer user experience I use GSAP for complex animations, scroll-driven effects and advanced timelines, or lighter alternatives for simple micro-interactions where they're a better fit.
For form handling I rely on React Hook Form combined with Zod for type-safe validation, both client- and server-side.
Backend
On the server side I use Node.js when I want lightweight, fine-grained control and a custom structure, and I switch to NestJS when the project requires a more organized, scalable architecture based on dependency injection, decorators and modules.
I expose REST APIs or, when it makes sense, GraphQL endpoints, and I handle the full stack of authentication, authorization, error handling and business logic for the application.
Database & ORM
I know and use different database solutions, both SQL and NoSQL, picking the right one for each project:
- SQL: PostgreSQL, MySQL, SQLite, Neon
- NoSQL: MongoDB
To interact with the database in a TypeScript environment I use Prisma when I want a polished developer experience and a good level of abstraction, or Drizzle ORM when I need to stay closer to SQL and squeeze out better performance. On MongoDB-based projects I work with Mongoose.
To inspect and manage data during development I use DBeaver for SQL databases and Drizzle Studio on projects that use Drizzle.
BaaS & CMS
BaaS (Backend as a Service)
For MVPs, startups or projects where speed and lean upfront costs are critical, I use Firebase or Supabase, which provide authentication, database, storage and real-time features out of the box, dramatically reducing time-to-market.
CMS
Sanity is the headless CMS I master best and the one I usually propose when a client needs to manage content in a flexible, structured and scalable way.
I'm also expanding into Directus and PayloadCMS to widen the options I can offer based on each project's needs, both in terms of features and self-hosting requirements.
Misc tech
For authentication in Next.js applications I mainly use NextAuth.js (Auth.js), configured with the providers that fit the context best (credentials, OAuth, magic links).
For payments I integrate Stripe, handling checkout flows, subscriptions, webhooks and the related server-side logic.
For transactional and marketing emails I rely on Resend, which integrates cleanly with modern frameworks and lets me manage templates directly in React.
For API testing and documentation during development I use Postman.
Deploy & Hosting
Depending on cost, performance and management needs, I deploy applications to:
- Vercel, my default choice for Next.js projects
- Netlify, for static sites and jamstack setups
- Render, for backend services and managed databases
- VPS providers (e.g. Hetzner, DigitalOcean) when I need more control or custom configurations
- AWS S3 for static asset, media and user file storage
I handle the whole flow: domain setup, HTTPS configuration, environment variables and the automated deploy pipeline.
Versioning
Git is my day-to-day tool for code versioning: branching strategy, rebase, conflict resolution and PR reviews are all part of my standard workflow.
I work mostly on GitHub, but I'm equally comfortable on GitLab and Bitbucket when the companies I collaborate with use them, both for source control and CI/CD pipelines.
Design
I use Figma both for the UI/UX design phase of projects I build from scratch and to read, interpret and implement designs delivered by clients or team designers, translating them into working interfaces without losing the intent of the original design.
AI in my workflow
AI is now an integral part of my daily workflow, not as a replacement for technical skills but as an accelerator.
I use Cursor AI directly in my editor for refactoring, boilerplate generation and pair-programming on the more repetitive tasks. ChatGPT I use for brainstorming, requirement analysis and support on more complex problems.
For fast UI prototyping I rely on v0.dev, while for visual assets and moodboards I use Midjourney.
Project Management
For task management, collaboration and communication with teams and clients I use:
- Trello for planning and tracking
- Slack and Discord for async communication with teams and communities
- Google Workspace (Docs, Sheets, Meet) for shared documents, spreadsheets and meetings
I'm used to plugging into clients' existing workflows without creating friction, but when needed I can also propose and set up the workflow that fits the project best.