MMHL.dev

Available for new projects

Matheus Henrique — Full Stack DeveloperI build thewhole product.

Front, back and infra.

I build complete applications in Next.js and TypeScript: data modelling, API, role-based authentication and deployment. From landing pages to multi-tenant SaaS running in production.

Scroll to explore
  • TypeScript
  • Next.js
  • React
  • Node.js
  • REST API
  • Firestore
  • PostgreSQL
  • Auth & RBAC
  • Multi-tenant
  • Python
  • Vercel

01What I do

I don't ship pretty screenswired to nothing.

I build complete products: data modelling, API, permission rules, deployment and the interface the user sees. Every layer designed together with the others.

  1. 01

    Frontend

    Interfaces in Next.js and React, typed end to end with TypeScript.

    • React 19
    • Next.js
    • TypeScript
    • Tailwind
  2. 02

    Backend

    Route Handlers and Node.js, with input validated by Zod. Python when the problem calls for it.

    • Route Handlers
    • Node.js
    • Zod
    • Python
  3. 03

    Database

    Firestore and PostgreSQL, modelled around who uses it, what they need and who may see what.

    • Firestore
    • PostgreSQL
  4. 04

    Authentication

    Role-based permissions enforced on the server — in Security Rules and RLS — not hidden in the interface.

    • Firebase Auth
    • RBAC
    • Security Rules
    • RLS
  5. 05

    Infrastructure

    Multi-tenant with real isolation between customers, and routines that run on their own as cron jobs.

    • Multi-tenant
    • Cron jobs
    • Vitest
  6. 06

    Deployment

    Vercel and GitHub Actions: from repository to production with no manual step in between.

    • Vercel
    • GitHub Actions

In production

From database to pixel.

Scroll to see the products running.

00 / 03

MHL.dev

Digital products, from database to deployment.

Now, one by one.

02Selected work

Selectedwork

Products built end to end — from multi-tenant SaaS to client landing pages.

01 / 06SaaS · Multi-tenant

AdvBoard

A complete product, from database to deployment: each firm is a tenant isolated in Firestore, with per-role permissions enforced in the Security Rules — not in the interface. It pulls court notices from the Brazilian national judicial gazette by bar registration number, every business day, on its own.

  • Next.js
  • TypeScript
  • Firebase Admin
  • Firestore Rules
  • RBAC
  • Cron
Read case
AdvBoard public landing page
AdvBoard kanban with the stages of a labour case
02 / 06App · Productivity

Lume

Four modules that would normally be four separate apps: habits with levels and coins, a focus timer, expense tracking and a personal library. Local state that syncs to Firestore when a session exists, so it works offline and carries over to another device.

  • Next.js
  • TypeScript
  • Firebase Auth
  • Firestore
  • Storage
Read case
Lume dashboard with check-in, streak and heat map
Lume habits with level progression

03Case studies

Insidethe products

The decisions that don't show up on screen — and why they were made.

Case 01SaaS · Multi-tenant2026

AdvBoard

Solo project — product, architecture, back-end, front-end and deployment

Problem

A small law firm runs its caseload on spreadsheets and WhatsApp. The workflow exists in people's heads — intake, calculation, filing, hearing, settlement — but nobody can see where a given case is, and a court notice only surfaces when someone remembers to check the official gazette. AdvBoard puts that workflow on a screen and fetches the notices without being asked.

Solution

Multi-tenant SaaS for Brazilian labour law firms: case flow on a kanban board, a calendar derived from the cases themselves, and court notices fetched automatically every business day.

Technical decisions

  1. 01Isolation lives in the path, not in a field
  2. 02Suspension has to take effect immediately
  3. 03A session that expires without getting in the way
  4. 04Court notices arrive on their own
  5. 05Permissions the server enforces
  6. 06What I would test again
advboard.app.br
Case flow — the eight stages, with priority and drag between columnsDashboard — KPIs, urgent actions and this week's hearingsCases — search, filter by stage and ownerAdministration — users and departments, the basis for permissionsThe product's public page

By the numbers

8

Workflow stages

9

API routes

2

Official data sources

154

Lines of Security Rules

Technologies

  • Next.js 16 (App Router)
  • React 19
  • TypeScript strict
  • Tailwind v4
  • shadcn/ui
  • Route Handlers
  • firebase-admin
  • Zod
  • Cron jobs
  • Cloud Firestore

Case 02App · Productivity2026

Lume

Solo project — product, front-end and back-end

Problem

Four things that normally live in four different apps: habits, focus, money and reading. Switching apps all day is enough friction to abandon all four. Lume puts them behind one interface, with a dashboard that answers the question that matters in the morning: what do I do now.

Solution

Personal assistant with gamified habits, a focus timer, expense tracking and a library — local state that syncs to Firestore when a session exists.

Technical decisions

  1. 01Local first, cloud second
  2. 02Gamification that does not become a chore
  3. 03A theme that follows the system
lume-mattdev.vercel.app
Dashboard — today's check-in, streak and heat map of the yearHabits — routines with level progressionRoom — focus timerFinances — fixed and variable expenses, cards and goals

By the numbers

4

Modules

100%

Works offline

Technologies

  • Next.js 16 (App Router)
  • React 19
  • TypeScript
  • Tailwind v4
  • useReducer
  • localStorage
  • Optional sync
  • Cloud Firestore
  • Firebase Storage
  • Firebase Auth

04Stack

Productionstack

The technologies behind the projects above, organised by layer.

01Frontend

Frontend

  • React 19
  • Next.js
  • TypeScript
  • Tailwind
02Backend

Backend

  • Route Handlers
  • Node.js
  • Zod
  • Python
03Data

Data

  • Firestore
  • PostgreSQL
  • Security Rules
  • RLS
04Auth

Auth

  • Firebase Auth
  • Role-based access
  • Multi-tenant
05Infra

Infra

  • Vercel
  • GitHub Actions
  • Cron jobs
  • Vitest
Photo of Matheus Henrique

Matheus Henrique

MHL.dev

Maceió, AL

05About

From databaseto pixel.

I'm a full stack developer based in Maceió, Brazil. I build entire products — data modelling, API, permission rules, deployment and the interface the user sees. I don't ship pretty screens wired to nothing.

My process starts with the business: who uses it, what they need, and who is allowed to see what. The architecture follows from that — the code comes after.

Where I work

  1. 01Modelling
  2. 02API
  3. 03Permission rules
  4. 04Database
  5. 05Infrastructure
  6. 06Interface
Based in
Maceió, Alagoas · Brazil

06Process

How a projectgets built

It starts with the business, not the code. The architecture comes out of understanding — and the code comes after it.

  1. 01

    Understand

    Who uses it, what they need and who may see what. That is where the architecture comes from.

  2. 02

    Architect

    Data modelling, API contracts validated with Zod, and permission rules designed for the server to enforce.

  3. 03

    Build

    Next.js and strict TypeScript, from the API route to the component the user touches.

  4. 04

    Validate

    Tests with Vitest and security rules tested in the emulator: a wrong permission doesn't show on screen, it shows up as a leak.

  5. 05

    Deploy

    Vercel and GitHub Actions, with cron jobs for whatever has to run on its own every day.

07By the numbers

What's already running

mhl.dev / by the numbers

Projects live
+8

6 documented here

Clients served
3
  • Petra Liora
  • Ramong.art
  • Porto Santos
Databases in production
2
  • Firestore
  • PostgreSQL
Strict TypeScript
100%

"strict": true

08Contact

Got an idea?Let's put itin production.

Need a system built from scratch, an API for an app that already exists, or someone to own the product end to end? Get in touch — I reply fast.

Let's work together

Straight to WhatsApp