CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

What this is

Marketing site for Meu Posto App (a cashback/loyalty platform for gas stations), built with Jekyll 3.9 and served via GitHub Pages at meuposto.app (see CNAME). All content is in Brazilian Portuguese. Ruby is pinned to 3.4.1 (.tool-versions).

Commands

bundle install                 # install gems
bundle exec jekyll serve       # local dev server (regenerates on change)
bundle exec jekyll build       # one-off build into _site/

Docker alternative (exposes port 4000):

docker-compose up -d
docker-compose exec app bash
bundle && jekyll serve

There is no test suite, linter, or JS build step — content is authored directly as HTML/Markdown/SCSS.

Architecture — two kinds of pages

The most important thing to understand: pages here fall into two distinct patterns, and most do not use Jekyll layouts.

  1. Standalone landing pages (e.g. sobre/, historia/, app/, and most top-level campaign folders like clube-vip-premiado/, equipe-premiada/, black-novembro/). Each is a directory with its own index.html that contains a complete <!DOCTYPE html> document — its own <head>, inline analytics, and often its own CSS. They carry Jekyll front matter (title, description, keywords, socialImg) for SEO but render their full markup themselves, ignoring _layouts/. When editing one of these, change the page’s own HTML/CSS; the shared includes and layouts do not apply.

  2. Layout-driven pages — the blog and a few others. Blog posts live in _posts/*.markdown with layout: post front matter (title, date, image, categories, index_resume) and are written in Markdown (kramdown). blog/index.html, contato/index.html, and juridico/contrato/index.html use layout: default. These flow through _layouts/default.html_includes/.

index.html at the repo root is a symlink to revendedor/index.html (the site homepage).

Page directory map

Almost every top-level directory is a standalone full-HTML page (pattern 1 above). The exceptions noted are layout-driven (pattern 2).

Core / product pages

Directory Page
revendedor/ Homepage (“Sistema de fidelização”) — root index.html symlinks here
sobre/ Sobre o Meu Posto App
historia/ História (historia_original/ is the prior version)
app/ App download / features landing
integracoes/ Integrações
meu-posto-xpert/ Meu Posto XPert (distribuidores)
central-pro/ Central PRO
casos-de-sucesso/ Cases de sucesso
midia/ Na Mídia
materiais/ Materiais / ebooks (data from _data/ebooks.yml)
calculadora/ Calculadora de Cashback (also _calculadora/ working copy)
fale-com-um-consultor/ Lead / consultant contact
infografico-texto-blog/ Infográfico landing

Promotional campaigns (mostly promo regulations — many are seasonal/recurring)

Directory Campaign
clube-vip-premiado/, clube-vip-premiado-2025/ Clube VIP Premiado (_clube-vip-premiado_old/ is a backup)
equipe-premiada/, equipe-premiada-2/ Equipe Premiada / Club VIP Equipe de Pista
agosto-com-cashback/, campanhadesaojoao/ É São João
campanha-carnaval/, ferias-premiadas/ Férias Premiadas
black-novembro/ Black Novembro
setembro-mes-do-cliente/ Mês do Consumidor
final-de-ano-premiado/ Final de Ano Premiado
promocional-expopostos/ Expopostos

Forms, legal & blog

Directory Purpose
blog/ Blog index — layout: default, lists _posts/
contato/, form-contato/ Contact forms (contato/ uses layout: default); submission via root contact.php
politica-de-privacidade/, termos-de-uso/ Legal pages
juridico/contrato/ Contract page — layout: default

Other: a1b2c3/ and a1b2c3.html/ are “Em manutenção” placeholders.

Shared building blocks (only affect layout-driven pages)

Styling and design system

docs/design-system.md is the visual source of truth (open docs/design-system.html for swatches/specimens). Honor it when building or editing pages: brand purple #660099 (with #5d2684 / #4e2771 variants), warm accent #9a4d1c reserved for emotional taglines only, Montserrat as the single font family, and a 4px-multiple spacing scale. CSS custom-property tokens (--color-primary, --sp-*, etc.) are documented there.

Conventions

Calculadora de Cashback (calculadora/)

A standalone HTML/CSS/JS tool — no Jekyll involved. Serve it statically from the repo root so ../assets/ resolves:

ruby -run -e httpd . -p 8000   # → http://localhost:8000/calculadora/
node calculadora/test_calculadora.js   # run the calc tests (Node, manual asserts)

Team conventions & workflow