Cliki
A link tracker, built with NestJS, Prisma, PostgreSQL, Passport.js, Next.js, Tailwind CSS, DaisyUI and ReCharts. Cliki is designed so that users can create aliases for their links, and add identifiers to them, so that they can see analytics about when and who their links were clicked by.
Built with:
NestJS
TypeScript
Prisma
Next.js
PostgreSQL
React
Tailwind CSS
DEVELOPMENT BLOG_
Introducing Cliki
I'm learning NestJS and wow is it powerful! Once you're used to the structure, creating endpoints is a breeze thanks to its dependency injection, decorators and TypeScript support. I needed a bite-sized project to find my way around - so I'm building a link tracker.
Authentication
My link tracking app is taking shape. The NestJS backend is mostly complete and the frontend, built in, you guessed it, Nextjs14, is underway.
Dabbling with NestJS
Been thinking about the structure of my latest project and decided to take a dive into NestJS as a potential backend. It seems like a pretty powerful tool for building API routes quickly - reminds me of Django in this regard.
Error Handling with useFormState, Zod and NestJS
Yesterday I went on a mission to improve the UX of the login and registration forms, with better form validation and error handling.
Breaking changes to the database!
Well, I completely broke my app! My NestJS, Prisma, PostgreSQL based link-tracking API has very much evolved throughout the build process. Initially conceived as a very simple tool for me to use (and a vehicle for learning NestJS), when I built the frontend and needed to add all the authentication/authorisation, I decided to make it suitable for multiple users.
Creating Magic Link Authentication
I wasn't happy with the authentication flow of Cliki. Originally I implemented username and password authentication using Passport.js, encrypting the passwords with bcrypt. However, it felt quite old school, and also I kept forgetting my test passwords 😂 . I decided to go for a more modern approach and implement a 'magic link' style login.
Improvements to tracking link URLs
In the original version of Cliki, the tracking URLs were formed like this: