Day 15

Today I implemented full user registration with email verification.
Registration creates an inactive account and sends a verification link with a JWT token.
Verification activates the account if the token is valid and not expired, and assigns the user to the default trial subscription plan.

I also introduced a custom JSON-based translation system, with language selected via the `x-lang` HTTP header.

Finally, I refactored subscription logic: a separate `plans` table was added.

Everything works. All tests passed.

https://write.tyolabs.com/2025/07/10/day15-account-registration-subscription-plans-email-verification-i18n/

#programming #jwt #subscription #json #monorepo #saas #codingdays

Day#15 Account Registration, Subscription Plans, Email Verification & i18n – Ideas. Engineered.

Day 14

Registration Form Implementation
I've just finished implementing a registration form with validation and language switching using Next.js and React Hook Form. Now users can register with dynamic language support (English/Polish) and data validation (email, password, phone).

Unfortunately, my account on Write.as has been temporarily blocked, so details about the implementation will be available once the account is unlocked. Stay tuned! 😊

https://write.tyolabs.com/?p=1

#programming #next_js #javascript #typescript #monorepo #saas #codingdays

Day#14 Register Form with Validation in Next.js and React Hook Form – Ideas. Engineered.

Day 13
version 0.6.0 released
Scoped access is now enforced across all core modules. Each repository operation is tenant-aware via a shared ScopedRepository base class.

Key facts:
12 modules refactored
96 updated tests
1 shared base class (ScopedRepository) used across the board

subscriberId is automatically applied in all find, findOne, save, remove operations

1 very long workday

Commit, tag, release β€” done

https://write.tyolabs.com/?p=42

#programming #typescript #saas #scoped_access #microservices #monorepo #codingdays

Day#13 β€” Scoped Access Done Right (12 modules, 80+ tests) – Ideas. Engineered.

Day 12

Implemented password reset functionality using JWT:
/auth/remind-password generates a short-lived token and sends it via email
/auth/reset-password verifies the token and updates the password using bcrypt

Validation handled with class-validator.
Endpoints documented with Swagger.
Token secret and base URL configured via environment variables.

https://write.tyolabs.com/?p=33

#programming #typescript #saas #microservices #monorepo #codingdays

Day#12 Password Reset Flow with JWT in a NestJS Backend – Ideas. Engineered.

Day 8
TL;DR: Yesterday I took a break. Today I’m back – and permissions are under control :)
Spent the day designing a fine-grained permission model.
I now support 96 distinct permissions across 8 modules, 4 CRUD operations, and 3 scopes: self, group, global.
Three system roles bind these into meaningful sets:
admin: full global access (32 permissions)
supervisor: read self + full group scope (32)
employee: read/update self only (16)

That's 80 role-permission bindings total. Uff.

https://write.tyolabs.com/?p=27

#sql #Microservices #monorepo #rbac #codingdays #programming #accessManagement

Day#8 Designing a Scalable Permission Model – Ideas. Engineered.

Day 7
βœ… 24 test suites, 153 tests passing.

Solid coverage across service and controller layers in my modular monorepo. Strict typing (TypeScript), full DTO validation, and realistic mocks across complex relations (TypeORM).

Next: fine-tuning error handling & exploring e2e strategies.

https://write.tyolabs.com/?p=25

#TypeScript #NestJS #Nextjs #InsuranceTech #Microservices #monorepo #rbac #codingdays #swagger #jwt #jwt_auth #programming

Day#7: 24 Test Suites, 153 Tests Passing β€” Scaling Confidence with Every Assertion – Ideas. Engineered.

Day 6
TL;DR: Groups, memberships, hierarchy β€” all dynamic now.

Released backend v0.3.0 πŸŽ‰

βœ… Users can belong to multiple groups with typed roles
βœ… Groups can form hierarchical or overlapping structures
βœ… Roles are normalized via reference types

Built with NestJS + TypeORM. Documented via Swagger.

https://write.tyolabs.com/?p=23

#TypeScript #NestJS #Nextjs #InsuranceTech #Microservices #monorepo #rbac #codingdays #swagger #jwt #jwt_auth #programming

Day#6: Building a Flexible Group Structure with NestJS and TypeORM – Ideas. Engineered.

Day 5
TL;DR: Continued work on backend security β€” role-based access is now fully wired up.

βœ… Got fine-grained role-based access control fully working today.

β€’ Roles loaded from PostgreSQL
β€’ Injected into JWT during login
β€’ Validated via custom `@Roles()` + `RolesGuard`
β€’ Authenticated via `@UseGuards(JwtAuthGuard)` globally
β€’ Introduced `@Public()` decorator to bypass guards for public endpoints
β€’ Swagger supports Bearer token for testing

Took a while to get the role propagation into the token right β€” the key was enriching the `validateUser()` result, not just fetching data from DB.

Modular, clean, and no magic. Feels good. πŸ‘Œ

more on: https://write.tyolabs.com/?p=21
#CloudNative #TypeScript #NestJS #Nextjs #InsuranceTech #Microservices #monorepo
#codingdays #swagger #jwt #jwt_auth #programming

Day#5: Continuation: Securing Routes with JWT and Role-Based Access Control – Ideas. Engineered.

Day 4

TL;DR: Full Swagger docs + JWT auth with registration and login are live.

Today’s work focused on two key improvements.

1. Swagger documentation was extended across all API layers. DTOs, entities, and controllers were enriched with `@ApiTags`, `@ApiOperation`, `@ApiResponse`, and detailed `@ApiBody` annotations β€” including real-life examples for request bodies.

2. JWT-based authentication was implemented. A secure registration flow was added, with password hashing via bcrypt. A login endpoint now issues access tokens containing user ID, email, and roles. All logic is encapsulated using Passport strategies (local and JWT). The next step will be protecting routes with guards and role-based access.

https://write.tyolabs.com/?p=19

#CloudNative #TypeScript #NestJS #Nextjs #InsuranceTech #Microservices #monorepo
#codingdays #swagger #jwt #jwt_auth #programming

Day#4: Releasing the First Version β€” Lessons in Developer-Facing Documentation – Ideas. Engineered.

Day 3 2/2
2. Enabling API documentation with Swagger.

I integrated Swagger into the backend (NestJS v10, ESM, Turbo monorepo), using `@nestjs/swagger@7` to match our current framework version.
The docs are now live at `/api/docs`, fully aligned with our global `ValidationPipe` and `AllExceptionsFilter` β€” ensuring consistent validation and error responses.

Next: annotate DTOs, describe endpoints properly, and restrict access.

https://write.tyolabs.com/?p=17

#CloudNative #TypeScript #NestJS #Nextjs #InsuranceTech #Microservices
#codingdays #programming

Day#3: Behind the Scenes: Challenges in Building a Modular, Scalable Platform – Ideas. Engineered.