Skip to content
All work

Social impact / NGO

MinaTech

Technology with purpose.

The platform of the Jornada Minatech — a free program organized by two NGOs that brings girls from public schools into technology and engineering.

Role
Full‑stack developer
Team
Four developers
Year
2026
Organization
Corali & Engenheiros sem Fronteiras (Florianópolis)
  • React
  • Vite
  • Node.js
  • Supabase
MinaTech home page: “Tecnologia feita por meninas, para meninas” and the 150+ girls the program has reached
MinaTech registration form: the stepper and its first section, personal data
Fig. 01 — The home page and the registration form, captured from the live site.

The impact

Opening doors through technology.

150+

girls impacted in Greater Florianópolis

Fig. 02 — The program's reach, in its own words on its site.

The Jornada Minatech shows girls from public schools that engineering and technology are for them too.

  • 100%

    free for the girls

  • 3

    Saturdays: talks, a visit to UFSC’s labs, a hands‑on day at Neoway

  • 11

    women on the program’s team

  • 2

    NGOs behind it: Corali and Engenheiros sem Fronteiras

The experience

From a girl’s first visit to the team’s decision.

  • A girl and her family

    Is this program for me?

  • A sponsor

    How can I help?

  • The team

    Who takes each spot?

Public experience

Six pages, open to anyone.

Everything a family asks before saying yes — who runs the program, when and where, the usual questions — and two actions: signing up or sponsoring.

Visit the live site

Registration. Five sections: personal data, contact, diversity and inclusion, family situation, digital access.

Sponsorship. The PIX QR code, and a button that copies the key.

Fig. 03 — Captured from the live site.

Curator dashboard

Everything the team needs to choose.

Behind a login: totals by status, tabs and search, approve, reject or delete, each registration in full, a CSV export — and the list of who can get in.

Registrations. The list, each row with its actions; below, the admins.

One registration. A registration in full: the form’s five sections, as the team reads them.

Fig. 04 — The panel holds the girls' personal data, so these screens come from the same code running locally in demo mode, with the three sample registrations it ships with.

The architecture

One platform. Two experiences.

Public sideOpen
  • /Home
  • /oscsTeam & NGOs
  • /programacaoSchedule
  • /faqFAQ
  • /doacaoSponsorship
  • /inscricaoRegistration

MinaTech

Shared baseSupabase

Closed panelLogin only
  • LoginSupabase Auth
  • List · search · CSVGET /api/admin/inscricoes
  • Approve · rejectPATCH /api/admin/inscricoes/:id
  • DeleteDELETE /api/admin/inscricoes/:id
  • AdminsGET · POST · DELETE /api/admin/admins

The API's two doors

POST /api/inscricao

Open to anyone, with a limit: 10 registrations per IP every 15 minutes. Each one is saved as pending.

/api/admin/*

Every call carries the session token from Supabase Auth, and the e‑mail must be one the program authorized.

What it keeps

  • inscricoes

    Ten answers in five groups, a status — pending, approved or rejected — and its dates.

  • admin_emails

    The admins the team manages. No policy opens it: only the API reaches it.

  • Row Level Security

    With the public key, a registration can only be inserted; reading, changing or deleting it needs a session.

The one public page that writes to the base.

Fig. 05 — Drawn from the code: the routes of one React app, the two doors of its Express API, and the base behind both.

Decisions

  • One deploy, one domain

    The React app and the Express API ship as one Vercel project: every /api call goes to a single serverless function on the site’s own domain, with one set of environment variables.

  • Checked on both ends

    The form flags each required field as she leaves it; the API checks everything again — the allowed options, the e‑mail, the age as a whole number — and stores only the cleaned record.

  • Runs without credentials

    With no Supabase keys, the same code switches to memory, with three sample registrations and a demo login — anyone can run and evaluate it without touching real data.

Engineering & contribution

Simple for the girls. Careful with their data.

  • Structure

    One repository, two halves

    A React 18 app with eight routes, the dashboard’s behind a guard; an Express API in layers — routes, middleware, controllers, and a repository, the only part that knows where the data lives.

  • Registration

    A long form, made doable

    The stepper watches which section is on screen; the phone gets a +55 mask; required fields are checked as she leaves them, and sending jumps to the first one left to fix.

  • Panel

    Fast on the list it has

    Totals, tabs and search work on the list already loaded, so filtering costs no request; a status change updates only its row; deleting asks first; the CSV is what’s on screen, encoded for Excel.

  • Users & access

    Two levels of admin

    Super‑admins live in an environment variable — hidden, and impossible to remove from the panel. The team adds the others itself; each new e‑mail gets an invite, and nobody can remove their own access.

  • Database

    Rules in the schema

    Postgres on Supabase: the status is a constraint with three values, an index backs the API’s filter by status, and each registration keeps when it was created and last changed.

My part

Full‑stack, in a team of four: from the public site and the registration to the API, the database and the curation panel.

The team’s work came in through pull requests, on a shared repository.

Built with

  • React
  • JavaScript
  • Vite
  • Node.js
  • REST APIs
  • Supabase
  • PostgreSQL
  • Vercel
  • Express
  • React Router
  • Helmet
  • express-rate-limit

Results & next steps

From sign‑up to selection, in the program’s own hands.

The Jornada has a home of its own: girls and families find what they need to say yes, sponsors find the PIX key, and the team decides every spot and manages its own access to the panel.

  • Selection with context

    Each registration arrives as pending, with what the program asks — school level, family situation, digital access — for the team to weigh.

  • Access in the team’s hands

    The program’s own e‑mail comes in as admin, and the team adds or removes the others from the panel.

  • Easy to pick up

    One repository, one command to run the site and the API together, and a README that walks through Supabase and Vercel step by step.

NextA blog and online courses — planned, not built yet.