Project · 2026

CEJUC — Academia de Artes Marciais

Institutional website for the CEJUC martial-arts gym (Canoas, Brazil) — classes, schedules, location maps and SEO, deployed on Azure.

An institutional website treated as an editorial piece — and maintained like real software: clean architecture, its own design system, and zero backend.

CEJUC Sports homepage: editorial hero “The family’s gym in Canoas” over a photo of the dojo, with WhatsApp, about and schedule buttons.

A full institutional website for the CEJUC martial-arts gym (Boxing, Judo, Jiu-Jitsu, Muay Thai, Physical Training and TP180), with an editorial identity and pages for classes, instructors, history, schedules and contact.

React SPA (React Router) with an MVC architecture (models/views/controllers), Leaflet maps for locations and partner schools, and structured SEO (schema.org, Open Graph, Google Analytics).

Deployed on Azure Static Web Apps with continuous delivery via GitHub Actions; an Azure Functions + Cosmos DB (MongoDB) backend is planned for schedules and dynamic content.

By the numbers

2003
Founded
5
Disciplines
10
Pages
320px
Mobile base
0
Backend

Engineering decisions

  1. 01

    Hook-based MVC architecture

    Every screen is a Page → Controller → View trio, with data isolated in Models. Views are purely presentational and Controllers hold state and effects — a separation institutional sites rarely pursue, and one that keeps the code readable, predictable and testable.

  2. 02

    Models as a versioned database

    Schedules, the store catalog, SEO and navigation live as in-memory data with pure getters. Moving to an API means swapping the source in a single place — and the path (Azure Functions + Cosmos DB) is already documented in the repo.

  3. 03

    Tokenized design system

    A single source of truth in tokens: color, typography, spacing, shadow, motion and accessibility. No “magic numbers”. Mobile-first from 320px, 44px touch targets, visible focus and ARIA across the whole navigation.

  4. 04

    Reuse without repetition

    The five disciplines share a single base controller (carousel + WhatsApp link); each page is a three-line wrapper. Less surface to maintain and identical behavior guaranteed across them.

  5. 05

    Product-grade performance and SEO

    Lazy-loaded routes, source-map-free builds, images with loading/decoding/fetchpriority, per-route meta tags and JSON-LD structured data (SportsActivityLocation). A site Google truly understands.

  6. 06

    Server-less conversion

    The whole journey — enrollment, questions, store orders — ends in a WhatsApp message assembled by the site itself. Business value delivered with no infrastructure cost, with continuous deployment to Azure on every push.

Architecture

Page

Route shell

Lazy-loads, calls the controller and passes props.

Controller · hook

State & effects

Presentation logic. Never renders.

Model

Pure data

Constants + getters. Today’s “database”.

View

Presentation

Pure JSX, everything via props.

Responsive

CEJUC Sports homepage on mobile: stacked title, subtitle and buttons, a compact menu and the floating WhatsApp button.
The same piece, from desktop down to 320px: navigation in an accessible dialog menu below 1100px, typography and spacing driven by tokens, and the floating WhatsApp always within reach.

Stack

ReactReact RouterLeafletAzure Static Web AppsGitHub Actions