Escritos a partir do código-fonte, não de memória - o que cada um faz, sobre o que está construído, com o que comunica e qual foi a parte verdadeiramente difícil.
28
sistemas descritos aqui em detalhe
90+
plataformas entregues de ponta a ponta
60+
integrações com terceiros no total
17
idiomas entregues numa só plataforma
Nenhum cliente é nomeado em parte alguma deste site. Cada sistema abaixo é descrito por setor, dimensão e função, o que chega para avaliar a arquitetura das plataformas. Numa chamada posso ir muito mais fundo e mostrar-te grande parte disso diretamente.
SAÚDE E ÁREA CLÍNICA
012026 - PRESENT
PROJETO 01
Sistema operativo para um grupo médico de quinze clínicas
Um único projeto Django a substituir oito ferramentas desligadas entre si em quinze clínicas: o site público bilingue, uma loja de serviços e subscrições, CRM de pacientes e leads, um seguimento de pedidos de laboratório com guias de transporte, contabilidade fiscal a comandar hardware de caixa registadora, registo de horas do pessoal alimentado por um cliente de desktop, chat interno e relatórios de publicidade - tudo por trás de um só admin, com permissões delimitadas por clínica em dez papéis.
Django 5.2, PostgreSQL e MariaDB, renderização no servidor, sem SPA. Cerca de 120 modelos em catorze apps e 170 templates. Instalado em alojamento partilhado sob Passenger, com cron em vez de Celery porque nenhum processo em segundo plano sobrevive ali.
A PARTE DIFÍCIL
Conversions API do lado do servidor com desduplicação face ao Pixel do browser através de um event id partilhado, dados pessoais em hash, disparada numa thread em segundo plano e a fazer fail open. Drivers de impressora fiscal com um modo degradado de driver nulo, para que um equipamento inacessível marque o talão como pendente em vez de bloquear a venda. Uma API com bearer token para um cliente Windows de registo de horas fora do repositório, que envia capturas de atividade minuto a minuto. Um sistema de papéis resolvido por prioridade - superutilizador, depois grupo, depois registo de funcionário da clínica - a alimentar dez dashboards diferentes a partir de uma só base de código.
Os pacientes carregam uma radiografia panorâmica e recebem achados de IA com graus de confiança, um plano de tratamento com preços e uma segunda opinião opcional; as clínicas recebem um portal reservado a subscritores e uma ficha no diretório. Quatro superfícies separadas - site público, aplicação do paciente, portal da clínica e admin - numa única instalação Django.
CONSTRUÍDO COM
DjangoPythonPostgreSQL
INTEGRADO COM
StripeMeta PixelMeta Conversions APIGoogle Tag ManagerGoogle Placesip-apiOpenAI-compatible vision APIOpenStreetMap
STACK
Django 5.2, PostgreSQL, Stripe, construtor de páginas GrapesJS no admin. Vinte e cinco modelos em quatro apps com modelos.
A PARTE DIFÍCIL
O backend de IA fica atrás de um único tipo de resultado normalizado com três implementações intermutáveis - mock, API alojada e auto-alojada - escolhidas por uma variável de ambiente, pelo que o produto inteiro funciona de ponta a ponta sem nenhum fornecedor de IA ligado e sem alterar código. Um pipeline clínico de carregamento → análise → achados → plano de tratamento → linhas de orçamento, com cada achado a carregar a sua própria banda de confiança. Middleware de atribuição de primeiro contacto que capta os click ids de quatro plataformas de anúncios para um relatório de funil de lead a cliente pagante.
032025
PROJETO 03
Site de clínica de turismo médico e portal do paciente
Site de marketing, calendário público de marcações e portal de self-service do paciente para uma clínica que vende a pacientes internacionais, em oito idiomas. O calendário mostra disponibilidade real sem deixar escapar nada - as marcações ocupadas aparecem apenas como indisponíveis.
CONSTRUÍDO COM
DjangoPythonMySQLNGINX
INTEGRADO COM
Meta PixelreCAPTCHASMTPip-api
STACK
Django 5.2, MySQL, modeltranslation em três apps, CKEditor 5, construtor de landing pages GrapesJS.
A PARTE DIFÍCIL
Uma máquina de estados do pedido de marcação até à aprovação: o pedido de um visitante fica pendente até a equipa aprovar, momento em que se cria ou associa uma ficha de paciente e se materializa uma marcação real. Cada lead guarda as suas respostas duas vezes - em JSON e em linhas individuais - a par de IP, user agent, referrer, geografia e o conjunto completo de UTM e click ids da Meta. As landing pages de campanha são montadas fora do routing com prefixo de idioma, para que o tráfego pago nunca caia num redirecionamento de locale.
RESERVAS, HOTELARIA E ALUGUER
042026 - PRESENT
PROJETO 04
Plataforma de prevenção e recuperação do burnout
Um quiz gratuito de risco de burnout e check-ins diários encaminham para uma subscrição de três níveis que junta um coach de IA a cursos de ciência do stress, áudio guiado, escrita de diário, círculos de comunidade e coaching individual pago por vídeo integrado. Uma via B2B paralela vende lugares a empregadores com orçamento para coaching, e um programa de embaixadores multinível paga comissão por cada cliente angariado. API em Django, aplicação web em React, site de marketing estático e um cliente Flutter, num só repositório.
Django 5.2 com DRF e JWT, PostgreSQL, Celery e Redis, hashing com Argon2, quarenta e nove apps locais. React com Vite e Tailwind no front, Flutter no mobile. Sentry, gunicorn com gevent.
A PARTE DIFÍCIL
Um motor de recomendação que classifica sete estados do sistema nervoso a partir de um check-in, aplica portas rígidas de elegibilidade, comprime a prioridade numa banda de seis pontos para que o contexto vença a popularidade, e depois amostra por softmax em vez de tomar o argmax - de modo que o catálogo inteiro se mantém alcançável, em vez de colapsar sempre nos mesmos vinte itens. Um quarto lugar fica reservado à descoberta e é amostrado por recência. Corre sobre queries diretas do driver e não sobre o ORM, porque é executado em todos os ecrãs. O retrieval assenta em cerca de trinta mil soluções estruturadas extraídas de perto de noventa e cinco livros, com um prompt que proíbe o modelo de responder a partir do seu próprio conhecimento geral e um ramo explícito para situações de crise. Um harness de Monte Carlo corre o motor real sobre sessões sintéticas - cinquenta mil check-ins numa execução, setenta mil sessões equilibradas noutra - a garantir que nenhum estado de crise recebe um cartão inadequado e que nenhum cartão é inalcançável. Também revelou uma falha real de deteção, que é precisamente para isso que serve um harness. A escolha de fornecedor e todas as chaves de API são resolvidas a partir de uma tabela editável no admin antes de recorrer ao ambiente, pelo que fornecedores e chaves rodam sem um deploy.
Reservas de vivendas e retiros, sincronizadas em quatro canais OTA
Reserva e pagamento diretos para três propriedades em Tenerife, mantidas em sincronia com Airbnb, Booking.com, Vrbo e Agoda através de um channel manager, com lógica de sinal, check-in online por token, um fluxo de compra de lugares em retiros e uma API de ingestão de leads alimentada por um scraper.
CONSTRUÍDO COM
DjangoPythonMySQLPostgreSQLCeleryRedisDocker
INTEGRADO COM
StripeSmoobuSMSAPIMeta PixelMeta Conversions APIGoogle Tag ManagerGoogle AnalyticsreCAPTCHASMTPGoogle SheetsPlausibleMaxMind GeoLite2ipapi.co
STACK
Django 5.1, MySQL em produção com PostgreSQL e SQLite como alternativas em desenvolvimento, Celery e Redis com fallback eager, bloqueio com django-axes, profiling com Silk, construtor GrapesJS. Quarenta modelos em seis apps.
A PARTE DIFÍCIL
A finalização do pagamento é deliberadamente duplicada e idempotente - a mesma rotina corre a partir do webhook da Stripe e da página de retorno, que sai de imediato se a reserva já estiver paga, para que um webhook perdido não possa perder uma reserva paga. O channel manager não oferece qualquer esquema de assinatura de webhooks, por isso o endpoint é autenticado por um segredo no caminho do URL, com um teste que o deixa vazio para provar que faz fail closed. Uma máquina de estados de reserva encaminha as estadias confirmadas para o canal direto e os bloqueios para outro canal; a propriedade sem id de canal é associada localmente por slug. Todos os emails de saída são persistidos antes do envio por um backend de correio personalizado.
062025
PROJETO 06
Reservas de aparthotel com conformidade fiscal romena completa
Reserva direta com Stripe, sincronização com OTAs e o conjunto completo de documentos fiscais romenos - fatura, proforma, recibo, cobrança, talão fiscal e ordem de pagamento - emitidos através de um fornecedor de contabilidade. O backend em Django é a parte terminada; as aplicações móveis separadas para a equipa e para os hóspedes foram construídas contra uma API que o backend ainda não expõe, e estão por acabar.
StripeSmartBillSmoobuFirebase Cloud MessagingBrevoSendGridGoogle Tag ManagerGoogle AnalyticsreCAPTCHAPlausible
STACK
Django 5.1, MySQL, Celery com fallback eager e Redis opcional, admin Unfold com um studio incorporado no repositório, HTMX e Alpine sobre Tailwind. Cerca de quarenta modelos em dez apps. Flutter nos dois clientes móveis, JWT em armazenamento seguro.
A PARTE DIFÍCIL
Um checkout a decorrer é mantido como reserva temporária e só é promovido a reserva real quando a Stripe confirma a sessão, de modo que os checkouts abandonados nunca ocupam inventário. Seis tipos distintos de documento fiscal partilham mixins comuns de partes e de linhas, em vez de serem um único modelo de fatura com uma flag de tipo. As fichas de hóspede reconciliam-se entre canais através de uma camada de hóspede canónico, com registos separados para pessoas singulares e empresas, para que a mesma pessoa vinda de uma OTA e de uma reserva direta seja um só registo. Todos os segredos de integração são resolvidos primeiro a partir da base de dados, com uma cache de sessenta segundos, pelo que as chaves rodam em produção.
072025
PROJETO 07
Reserva de aluguer de automóveis com confirmação por código de email
Uma frota filtrável por marca, tipo, caixa, combustível, lugares, preço e local, com alugueres normais e pacotes de preço fixo. O pagamento é feito no levantamento e não online, pelo que todo o problema da confirmação se resolve com um código de verificação em vez de um gateway de pagamento.
CONSTRUÍDO COM
DjangoPythonMySQLTailwind CSSAlpine.js
INTEGRADO COM
Google AnalyticsFrankfurterreCAPTCHASMTPWhatsApp click-to-chatexchangerate.host
STACK
Django 5.0, MySQL, modeltranslation em oito idiomas, Tailwind e Alpine a partir de CDN sem passo de build. Trinta e oito modelos.
A PARTE DIFÍCIL
Confirmação da reserva por código de seis dígitos enviado por email, com limite de tentativas por IP fixado em cinco, validade de quinze minutos e um período de espera para reenvio. Tokens assinados e com prazo dão a um visitante anónimo acesso à sua própria página de reserva durante vinte e quatro horas, sem conta. O preço é recalculado no servidor em cada gravação, a partir de uma tabela de cinco escalões de dias cruzada com o nível de seguro, com o desconto aplicado apenas ao subtotal do aluguer - nunca aceite a partir do cliente.
GERAÇÃO DE LEADS, TELEFONIA E TRADING
082026
PROJETO 08
SaaS multi-tenant que vende subscrições de software, com serviços de marketing por cima
Uma única instalação Django a servir o site da própria plataforma, o subdomínio de cada cliente e o domínio próprio de cada cliente. Cada tenant recebe a fatia de back office que o administrador da plataforma lhe conceder: um construtor de páginas, um construtor de formulários em vários passos com verificação por SMS, uma loja com pagamentos e faturação fiscal, guias de transporte e fulfilment, um CRM que cobre encomendas, consultas, tickets, fidelização e OCR de faturas, atribuição de primeiro contacto e um dashboard de cliente. A geração de leads é um dos módulos, não o produto.
StripeEuPlătescSmartBillFGOFAN CourierSamedayCargusGLSDPDDHLSinapseriaFulfiloHelpshipTrustedFormTCPA & DNC scrubbingSMSAPITwilioWhatsApp Business APIAnthropicAzure OCRMeta PixelMeta Conversions APITikTok PixelGoogle Tag ManagerGoogle AnalyticsreCAPTCHAcPanel and WHMRRDBliveCallManagerTurnstileCaddyZoom
STACK
Django 5.1, MySQL, Redis e Celery, DRF com JWT e OpenAPI, admin Unfold, modeltranslation e parler. Uma aplicação React 19 construída com Vite e entregue já compilada. Catorze apps, sete idiomas com catálogos de tradução completos.
A PARTE DIFÍCIL
Scoring de leads por modelo de linguagem com pesquisa web: as respostas do formulário, os UTMs, os click ids, o resultado da autenticação e o estado face à lista de não-contactar são reunidos num dossiê e classificados numa banda, com fundamentação e uma ação recomendada, usando uma chave por cliente. Uma camada de conformidade em três partes - limpeza completa com deteção do tipo de linha e de número móvel, verificação de litigantes e consulta de números reatribuídos face à data do consentimento. O tenant é resolvido a partir do cabeçalho Host com uma cache de cinco minutos, e cada submissão de formulário é reverificada contra o cliente desse host, pelo que um lead entre tenants é estruturalmente impossível. O construtor de formulários guarda um HMAC de cada código de verificação em vez do código, e cada checkbox de consentimento escreve um registo imutável da redação exata, do IP e do URL.
092026
PROJETO 09
Marketplace de leads nos EUA com um pipeline de scoring de trinta fornecedores
O tráfego pago aterra num quiz; o lead resultante é avaliado contra cerca de trinta fornecedores de fraude, conformidade e intenção, encaminhado para um comprador por capacidade e geografia, enviado para um dialler para transferência em direto, entregue no CRM do comprador e faturado. Os compradores gerem a própria conta num portal com carteira; os media buyers têm dashboards de custo por lead.
Django 5.2 com Wagtail, dois repositórios de dados - PostgreSQL para o estado operacional e ClickHouse para a torrente de eventos de tracking - Redis, Celery com beat e Flower, DRF mais uma camada JWT feita à mão para o mobile. Quarenta e seis modelos só na app principal.
A PARTE DIFÍCIL
Cada fornecedor mapeia para uma de três subpontuações - contactabilidade, autenticidade, intenção - executadas em paralelo através de um pool de threads e reduzidas por média a uma nota composta, com pesos ajustáveis no admin. Os adaptadores que dão erro ou são saltados saem do denominador em vez de pontuarem zero, e qualquer adaptador bloqueante impõe de imediato a nota mais baixa. O conjunto de sinais inclui biometria comportamental, fingerprinting de TLS, profundidade de scroll e cadência de preenchimento do formulário, a par de três subsinais de modelo de linguagem. O encaminhamento para compradores filtra por crédito, horário de funcionamento, capacidade diária e semanal, vertical e geografia, e depois desempata pela carga das últimas vinte e quatro horas antes da prioridade. Cada chamada a um fornecedor escreve uma linha de log com endpoint, estado e resumo da resposta, precisamente para que o custo de fornecedores por lead possa ser reconciliado.
Um cliente móvel para a equipa que constrói os seus próprios ecrãs
Uma aplicação Flutter de administração para o marketplace de leads que apresenta ecrãs de lista, de detalhe e de edição para qualquer modelo do admin do Django sem uma única alteração em Flutter - lê o registo do admin por REST e gera os formulários a partir do schema.
CONSTRUÍDO COM
FlutterDartDjangoPython
STACK
Flutter com Riverpod, Dio e go-router, armazenamento seguro para os tokens. Uma app Django complementar que expõe o registo do admin como REST.
A PARTE DIFÍCIL
As permissões não são reimplementadas: a API mapeia os verbos HTTP para as próprias permissões de ver, adicionar, alterar e eliminar do Django, e a pesquisa, a paginação e a ordenação das listas vêm diretamente da configuração de cada classe do admin. Acrescentar um modelo ao admin do Django acrescenta-o à aplicação móvel. Uma aplicação irmã para compradores replica os catorze conjuntos de tema por cliente da aplicação web, lendo o que está ativo no início de sessão e guardando-o em cache para que a marca errada nunca apareça por instantes no arranque a frio.
112026
PROJETO 11
Plataforma de sinais de trading com um motor de confluência próprio
Um serviço por subscrição que publica ideias de trading em cinco mesas com dimensionamento de posição imposto, geradas por um motor de confluência técnica com sentimento de notícias avaliado por modelo, entregues através de uma aplicação web e de três clientes Flutter - móvel, macOS e Windows - que partilham uma só base de código. Os novos membros não chegam ao dashboard enquanto não verificarem o email e não preencherem um questionário de risco.
StripePayPalPaddleTwilioFirebase Cloud MessagingAnthropicGoogle Tag ManagerGoogle AnalyticsTwelve DataSMTPPlausibleBNB ChainAlpha VantageCoinGeckoMarketauxNewsAPIexchangerate.host
STACK
Django 5.2 com Wagtail, MySQL, Redis, Celery com beat, Channels e Daphne para WebSockets, DRF com JWT, pandas e numpy, web3 para o canal de pagamento em cripto. Flutter e Dart nos clientes móvel e de desktop, um único lib/ partilhado pelos três. Dezassete idiomas configurados.
A PARTE DIFÍCIL
Sete leituras independentes de indicadores por timeframe, e um timeframe só concorda quando pelo menos cinco das sete coincidem - depois confirmação multi-timeframe por cima, com portas opcionais de candlestick e de notícias e stops e alvos derivados do ATR. Cada passagem escreve uma linha de auditoria, tenha ou não produzido um sinal, e o dry-run é o comportamento por omissão. O canal de pagamento em cripto não guarda nenhuma chave privada no servidor: uma tarefa agendada vigia a cadeia à procura de transferências para um endereço de receção, associa os depósitos pendentes pelo valor e confirma ao fim de doze confirmações. Duas middlewares empilhadas tornam o produto inacessível enquanto o onboarding não estiver genuinamente completo.
COMÉRCIO, ERP E FERRAMENTAS INTERNAS
122025
PROJETO 12
E-commerce de moda com fulfilment e faturação fiscal
Uma loja de vestuário e calçado com marcas, categorias aninhadas, tamanhos e stock por variante com códigos QR, carrinho e checkout - e um back office que gera guias de transporte e emite faturas fiscais, de modo que uma encomenda se torna uma expedição e uma fatura sem sair do admin.
CONSTRUÍDO COM
DjangoPythonMySQLTailwind CSSAlpine.js
INTEGRADO COM
PayPalSmartBillFAN CourierFrankfurterreCAPTCHA
STACK
Django 4.2, MySQL, admin Unfold com um dashboard em Chart.js, modeltranslation em oito idiomas, Tailwind e Alpine a partir de CDN. Sessenta e dois modelos em nove apps, sessenta e três tabelas.
A PARTE DIFÍCIL
A cadeia de fulfilment é real e não declarativa: a geração da guia de transporte regista o pedido, a resposta e o erro completos na encomenda, e a faturação emite documentos e estornos sobre ela. O preço em duas moedas guarda o valor nativo e o valor apresentado como um par, em vez de um valor e uma taxa, para que uma encomenda antiga não seja silenciosamente reavaliada quando o câmbio se move.
132025
PROJETO 13
ERP de proposta a contrato a fatura para um estúdio de design de interiores
O portefólio público é a metade pequena. O back office transforma um projeto numa proposta com preços divisão a divisão, a proposta num contrato legal romeno, e o contrato em proformas, faturas, pagamentos e recibos - gerando internamente os PDFs de proposta e de contrato que vão para o cliente.
Django 4.2, MySQL, admin Unfold, ReportLab com um tipo de letra próprio registado para a composição dos PDFs. Cinquenta e cinco modelos.
A PARTE DIFÍCIL
O corpo do contrato é um modelo legal estruturado que se numera sozinho, fixa os dados do beneficiário no momento da assinatura e valida que um contrato liga a uma pessoa singular ou a uma empresa, mas nunca às duas. Os PDFs de proposta são compostos divisão a divisão - oito tipos de divisão, cada um com a sua descrição, preço e fotografias - como um documento paginado e não como o preenchimento de um template. Todos os valores monetários são guardados nas duas moedas, em colunas paralelas.
142025
PROJETO 14
Registo de horas com um cliente de desktop nativo para Windows
Entradas e saídas, pausas, horários por dia da semana, pedidos de transferência entre escritórios, folhas de horas e relatórios em Excel - entregues como uma aplicação Django mais um cliente de desktop nativo, em white label e instalado para um grupo de clínicas. Os funcionários não têm palavras-passe; um único código de acesso autentica as duas superfícies.
CONSTRUÍDO COM
DjangoPythonMySQL
INTEGRADO COM
SMTP
STACK
Django 5.2, MySQL, admin Unfold com templates próprios de calendário e de folha de horas. O cliente de desktop é Tkinter - cerca de 1.600 linhas - empacotado com PyInstaller num único executável e distribuído por um instalador.
A PARTE DIFÍCIL
A lógica de saída automática é a parte interessante: uma sessão fecha no seu último heartbeat apenas quando já passou o fim do dia previsto e não chega nenhum heartbeat há dez minutos - e um heartbeat posterior, com um carimbo temporal de aplicação viva, pode ressuscitar uma sessão que uma falha real tenha fechado. É um problema de estado distribuído tratado como deve ser, e não um cron noturno que adivinha.
152024
PROJETO 15
CRM de vendas para um estúdio de design
Uma ferramenta interna focada: potenciais clientes acompanhados por atributos do imóvel - tipo de espaço, utilização, escalão de área, divisões, orçamento - com registos de contacto por canal, agendamento de reuniões, faturas proforma em PDF e um dashboard do pipeline.
CONSTRUÍDO COM
LaravelPHPMySQLViteTailwind CSSAlpine.js
INTEGRADO COM
SMTP
STACK
Laravel 11 com Breeze, MySQL, Blade com Vite, Tailwind e Alpine, DomPDF. Onze modelos, dezoito migrações.
A PARTE DIFÍCIL
Nada de invulgar em termos de arquitetura, e não deve fingir o contrário: é uma ferramenta interna pequena e correta. A parte substancial é o dashboard do pipeline, que agrega contagens por tipo de espaço e por utilização, a distribuição por escalão de área e o orçamento médio face ao valor total e ao valor pago das proformas.
162025
PROJETO 16
Portal de clientes de uma agência com uma ferramenta de código para diagrama
Um site de marketing com uma área de cliente onde os clientes acompanham os projetos que estão a ser construídos para eles - marcos, tarefas, comentários, anexos - mais uma ferramenta só para a equipa que transforma os modelos e as rotas de um projeto em diagramas de arquitetura e numa especificação de layout.
Django 4.2, MySQL, admin Unfold, modeltranslation em dez idiomas, Tailwind e Alpine. Cerca de trinta modelos. Um plugin complementar para a ferramenta de design, fora do runtime do Django.
A PARTE DIFÍCIL
O pipeline recebe código colado, gera a partir dele diagramas de arquitetura e de fluxo, e depois constrói uma especificação de ecrãs e de paleta que um plugin da ferramenta de design vai buscar e desenha como frames reais e editáveis. É uma ferramenta pequena, mas tira a hora menos agradável do início de qualquer projeto.
172026
PROJETO 17
Ferramenta de áudio generativo, apenas com a biblioteca padrão
Uma ferramenta interna para gerar áudio ambiente e de relaxamento através de uma API de geração de música - um cliente com uma interface de nove comandos, um servidor local e uma UI no browser - feita para a biblioteca de áudio de um produto de bem-estar.
CONSTRUÍDO COM
Python
INTEGRADO COM
Mubert
STACK
Apenas a biblioteca padrão do Python. Sem framework, sem dependências, sem passo de build, cerca de 920 linhas. O servidor é o próprio servidor HTTP da biblioteca padrão, com uma fila de tarefas em threads.
A PARTE DIFÍCIL
Trata corretamente a autenticação em dois níveis do fornecedor - credenciais de serviço para emitir credenciais de cliente, depois credenciais de cliente para a geração, guardadas em cache e reutilizadas - e trata a geração como genuinamente assíncrona, sondando cada tarefa na sua própria thread com um timeout. Sem credenciais configuradas, a UI desativa a geração e di-lo, em vez de falhar no momento de uso.
182021 - 2024
PROJETO 18
O site de marca de um personal trainer, em que os programas de treino são os produtos
Os programas de treino são objetos de conteúdo que servem ao mesmo tempo de artigos vendáveis: cada um traz um preço, uma duração em dias, uma nota sobre suplementação, um PDF descarregável e um vídeo. À volta deles há uma loja de merchandising e de sessões, uma galeria do treinador, testemunhos, um formulário de pedido de marcação e checkout com PayPal, em quatro idiomas de conteúdo, em alojamento partilhado.
PHP e Laravel 8 com Jetstream e Livewire, MySQL, templates Blade, Laravel Mix a compilar Tailwind, Bootstrap, jQuery, Alpine e Sass. Treze modelos, vinte e nove migrações, trinta e dois controladores, Apache em cPanel.
A PARTE DIFÍCIL
A tradução vive no schema e não num pacote: os modelos de post, loja, galeria e menu levam cada um quatro conjuntos de colunas paralelos, um por idioma, e o romeno chegou cinco anos depois do lançamento através de migrações que alargam todos eles. É um desenho mais tosco do que uma tabela de traduções e tem uma virtude real - ler uma linha traduzida é a mesma query que ler uma não traduzida, sem join e sem lógica de fallback para correr mal. Vale a pena dizê-lo com clareza: isto é um monólito CRUD convencional sobre uma stack que envelheceu. O que demonstra não é engenho, mas sim que foi mantido discretamente durante anos depois da entrega.
INDÚSTRIA, ENERGIA E SEM FINS LUCRATIVOS
192025
PROJETO 19
Catálogo multilingue e motor de emails para um fabricante de segurança rodoviária
Site institucional e catálogo de produtos para um fabricante de sinalização e equipamento rodoviário, editável no admin em nove idiomas - construído à volta de um motor próprio de envio de emails em massa agendados, com reconciliação de devoluções, porque a lista de contactos do cliente é o ativo comercial.
CONSTRUÍDO COM
DjangoPythonMariaDBBootstrapDockerNGINX
INTEGRADO COM
Google AnalyticsreCAPTCHASMTPIMAP
STACK
Django 4.2, MariaDB, admin Jazzmin com inlines aninhados, modeltranslation e Rosetta para editar traduções no browser, Bootstrap e AOS. Trinta modelos. Quatro contentores: nginx, web, base de dados e um agendador.
A PARTE DIFÍCIL
O emissor de campanhas calcula quantos intervalos passaram desde a hora de início e envia o lote seguinte de dez destinatários, acompanhando o progresso e escrevendo um registo de entrega com um message id gerado por destinatário - uma limitação de cadência pensada para sobreviver a um servidor de correio partilhado, em vez de pressupor um fornecedor de entrega. Depois, uma tarefa de hora a hora consulta o IMAP, interpreta as notificações de devolução e reconcilia-as com esses registos de entrega pelo message id. Por baixo, defesas em camadas contra abuso: armadilhas de URL do tipo honeypot que banem o IP de origem durante trinta dias, uma blocklist de bots maliciosos e limites de taxa por view.
202025
PROJETO 20
Site trilingue de trading de energia, incluindo escrita da direita para a esquerda
Site de marketing para uma empresa de trading, fornecimento e produção de energia, cobrindo trading, corretagem, fornecimento e subestações de alta tensão, em inglês, romeno e hebraico - três árvores de páginas paralelas, nove páginas cada.
CONSTRUÍDO COM
Tailwind CSSJavaScriptPHPNGINX
INTEGRADO COM
Google AnalyticsreCAPTCHASMTP
STACK
HTML estático com Tailwind compilado numa única folha de estilos, módulos de JavaScript puro, um único endpoint em PHP para o formulário de contacto. Apache em alojamento partilhado.
A PARTE DIFÍCIL
O endpoint de correio fala SMTP diretamente - abre um socket TLS e faz ele próprio o handshake de autenticação, sem nenhuma biblioteca de email - porque o alojamento não oferecia alternativa utilizável. A analítica é genuinamente consent-first: a tag não é sequer carregada enquanto o consentimento não estiver guardado, respeita ainda o Do-Not-Track e recusa-se a correr fora do hostname de produção. A escrita da direita para a esquerda é tratada no código-fonte do Tailwind, em vez de acrescentada como uma segunda folha de estilos, e cada URL declara as suas alternativas de idioma.
212024
PROJETO 21
Plataforma de donativos e voluntariado para uma instituição de solidariedade para crianças
Site público, campanhas de angariação de fundos, eventos, donativos online e inscrição de voluntários para uma instituição de solidariedade romena que apoia crianças desfavorecidas e crianças com autismo, editável no admin em oito idiomas.
CONSTRUÍDO COM
DjangoPythonMySQL
INTEGRADO COM
PayPalGoogle AnalyticsreCAPTCHASMTP
STACK
Django 4.2, MySQL, admin Unfold, modeltranslation. PayPal chamado diretamente por REST em vez de através de um SDK.
A PARTE DIFÍCIL
Um padrão de CMS com modelos singleton em que cada uma das cerca de vinte secções de página cria automaticamente a sua linha na migração, para que quem edita nunca abra o admin num ecrã vazio e nunca tenha de saber o que é uma fixture. Todas as chaves de terceiros vivem num cofre em base de dados e não em ficheiros de ambiente, o que é a troca certa para um cliente que muda de fornecedor mais vezes do que faz deploy.
222024
PROJETO 22
Catálogo bilingue para um fabricante industrial de juntas de vedação
Quarenta e oito páginas de produtos e serviços - juntas espiraladas e metálicas, juntas de dilatação, equipamento naval, corte a laser, galvanoplastia - para um fabricante fundado em 1992 que fornece clientes petroquímicos, de energia e de construção naval, com as suas certificações publicadas ao lado.
CONSTRUÍDO COM
JavaScript
STACK
HTML estático. Sem framework, sem base de dados, sem passo de build - a resposta certa para um catálogo que muda duas vezes por ano e tem de sobreviver à janela de suporte de qualquer framework.
A PARTE DIFÍCIL
Nada, e é esse o ponto. Nem todos os briefings são um sistema, e um site estático que o cliente pode alojar em qualquer lado durante uma década é aqui um resultado melhor do que um CMS em que ninguém vai entrar.
232024
PROJETO 23
O site de uma agência de performance marketing, em que cada secção é uma linha no admin
Um site para uma agência que gere campanhas pagas em redes sociais e em pesquisa. Não há uma página que um cliente tenha de me pedir para editar: cada secção da homepage - hero, serviços, processo, grelha de casos, testemunhos, colunas do rodapé - é o seu próprio modelo editável no admin. A única lógica a sério é o formulário de contacto, que qualifica em vez de apenas recolher, perguntando pelo site, pelo orçamento mensal de anúncios e por que plataformas querem usar.
Django 4.2 com django-unfold, MySQL através de PyMySQL, modeltranslation em oito idiomas, CKEditor para os campos de texto longo, Tailwind e Alpine carregados de um CDN sem passo de build, Whitenoise, Passenger em cPanel. Trinta e dois modelos em três apps.
A PARTE DIFÍCIL
Nada aqui é difícil, e a entrada ganha o seu lugar por demonstrar a competência oposta: um site cujo dono nunca precisa de um programador para mudar uma palavra. A falha honesta está à vista no schema - o modelo de portefólio ainda carrega um campo de área e um campo de localização herdados do template imobiliário de que foi forkado, e cerca de um terço da lista de dependências vem arrastada e nunca é importada. É isto que custa, na prática, forkar um projeto que funciona para poupar uma semana, e prefiro mostrá-lo a limpá-lo da história.
242025
PROJETO 24
O site de uma agência digital como single-page app estática, com a animação escrita à mão
Nove linhas de serviço, um processo de cinco passos, uma montra de marcas próprias e testemunhos, sem backend nenhum: cada palavra do texto vive num único módulo, e o conjunto todo é publicado como ficheiros estáticos por trás de uma única regra de rewrite. Cada serviço tem a sua própria animação, em vez de um efeito partilhado aplicado nove vezes.
CONSTRUÍDO COM
Vue.jsViteTailwind CSSJavaScriptGreenSockApache
INTEGRADO COM
reCAPTCHAGoogle Fonts
STACK
Vue 3 com a Composition API, Vue Router, Vite com chunking manual de vendors, Tailwind, GSAP, ícones Lucide. Cerca de seis mil e trezentas linhas em oito rotas, uma das quais é uma página de design system. Apache a servir o resultado da build.
A PARTE DIFÍCIL
Doze componentes de animação, um por serviço, escritos e não trazidos de uma biblioteca, com composables de intersection observer e de contagem crescente por baixo. É trabalho de ofício e é essa toda a sua ambição. Traz também o exemplo mais claro que tenho de uma dependência que sobreviveu ao seu propósito: o reCAPTCHA v3 carrega em todas as páginas e não protege nada, porque não há formulário nenhum no site - a rota de contacto é um link mailto, e a biblioteca de validação instalada para o formulário que nunca chegou a ser feito continua no manifesto. Um script de terceiros que corre em cada carregamento de página e não faz nada é uma responsabilidade em matéria de consentimento, e não um resto inofensivo, e está na lista para remover.
BLOCKCHAIN E TRADING ALGORÍTMICO
252026
PROJETO 25
Uma sidechain EVM, de ponta a ponta - rede, explorador, bridge, carteira e launchpad
O lançamento inteiro, não só os contratos. Uma topologia de nós com seis papéis - bootnode, validadores, RPC público, arquivo, explorador e faucet - gerada por rede a partir de um único ficheiro de alocação, em devnet, testnet e mainnet, cada uma com o seu faucet. Por cima: um conjunto em Solidity que cobre a moeda nativa, uma bridge entre cadeias atestada por validadores, staking, vesting e um launchpad de tokens pago por funcionalidade; um relayer em Node que transporta mensagens entre cadeias; um explorador de blocos com tema próprio; e uma extensão de carteira para Chrome que fala EIP-1193. Para ser exata sobre o que é meu - o cliente de nó em si é upstream e não foi modificado. Tudo à volta dele não é.
Google FontsBNB ChainArbitrumBaseAvalancheBlockscoutUniswap V2SolanaAWSArbiscanBAS node stackBasescanBscScanEthereumEtherscanOptimismOptimistic EtherscanPancakeSwap V2PolygonPolygonScanQuickSwapSepoliaSnowtraceTrader Joe V1
STACK
Solidity 0.8.24 com OpenZeppelin 5.1 fixado na versão exata, Hardhat e ethers v6, Node 20 para o relayer e o faucet, Terraform e Docker Compose para a frota de validadores, uma stack Blockscout incorporada no repositório atrás de nginx para o explorador, JavaScript puro para as dApps e para a carteira, Rust e Anchor para o lado da Solana. 3.500 linhas de Solidity original, 12.000 de JavaScript, 142 testes de contrato em quatro suites.
A PARTE DIFÍCIL
Um único ficheiro de alocação é a fonte de verdade para a oferta total de cem milhões, e a build gera a partir dele o genesis, os diretórios de compose por papel e os scripts de deploy, tanto para devnet como para testnet e mainnet - de modo que as três redes não se podem afastar umas das outras. Um passo de preflight recusa-se a construir um genesis de mainnet enquanto restar algum endereço de placeholder. O faucet reimplementa o protocolo WebSocket do próprio cliente de nó, para que a página não precise de um caso especial para redes locais. O relayer só avança o seu cursor de blocos depois de cada mensagem de um intervalo estar persistida, porque avançar primeiro perde transferências para sempre e nada volta a varrer. A conservação da oferta é um invariante de desenho e não uma verificação: exatamente uma cadeia faz escrow e todas as outras cunham, o teto do token é igual à oferta do genesis, e os scripts de deploy não cunham nada. A versão do OpenZeppelin está fixada porque a 5.2 emite um opcode mais recente do que a EVM do nó - uma biblioteca mais recente produziria bytecode que os seus próprios validadores não conseguiriam executar. A bridge é uma bridge de quórum de confiança e é descrita como tal em três sítios distintos, em vez de ser chamada trustless.
262026
PROJETO 26
Bot de trading intradiário de ouro, com o modelo mantido fora do caminho crítico
Um bot intradiário que negoceia ouro spot e opções sobre ETF de ouro em duas vias paralelas - uma via de scalping em barras de cinco segundos construídas a partir do fluxo bruto de negócios, e uma via de swing em barras de um minuto. Nove portas separam um padrão detetado de uma ordem: sessão, blackout de notícias, regime de volatilidade, qualidade do padrão, alinhamento com a tendência, concordância do timeframe superior, volume, sentimento das notícias e confiança. Corre contra contas de simulação do corretor, e a negociação real está deliberadamente por implementar e bloqueada no código.
CONSTRUÍDO COM
PythonpandasNumPySQLiteMySQLLinux
INTEGRADO COM
AnthropicGDELTFREDBLSFederal ReserveECBAlpacaMarketauxSaxo Bank
STACK
Python 3.11 com pandas e numpy, com versões deliberadamente limitadas para que os wheels pré-compilados instalem em alojamento partilhado sem compilador. SQLite para o diário de operações, MySQL para exportação, o próprio servidor HTTP da biblioteca padrão para o dashboard. 18.000 linhas em 94 módulos e 541 testes.
A PARTE DIFÍCIL
O modelo de linguagem corre no seu próprio relógio, em segundo plano, e escreve uma cache que o ciclo de trading lê instantaneamente, porque uma ida e volta de um a três segundos em barras de cinco segundos significa agir sobre um preço que já não existe - e essa falha é silenciosa, porque a resposta continua a parecer sensata. Pode emitir um viés e dois multiplicadores; não pode inventar uma operação, escolher uma direção, dimensionar uma posição ou mexer num stop, e faz fail open para neutro. A camada de aprendizagem é regressão logística escrita à mão, precisamente para não poder esconder overfitting: dentro e fora da amostra sempre reportados juntos, divisões ordenadas no tempo e uma baseline ingénua de aceitar todas as operações impressa ao lado. As saídas disparam sobre o preço do subjacente e não sobre o prémio da opção, porque o prémio move-se com a volatilidade e com o decaimento temporal. O supervisor usa um lock de ficheiro depois de duas execuções separadas por segundos terem escapado a uma verificação de pidfile e terem deixado dois bots a operar sobre a mesma conta.
PLATAFORMAS QUE CONSTRUÍ PARA MIM
272025
PROJETO 27
O meu próprio site e portal de clientes, com uma ponte para o Figma integrada no admin
O lado público é um portefólio. Depois de um início de sessão, torna-se um pequeno portal de clientes - projetos, marcos, tarefas, comentários e anexos - e por trás de um início de sessão de equipa há um painel que lê os modelos e a configuração de URLs de um projeto e os transforma em diagramas e numa árvore de nós do Figma.
Django 4.2, django-unfold, MySQL, modeltranslation em dez idiomas, CKEditor, Tailwind e Alpine a partir de um CDN, Passenger em cPanel. Trinta modelos em três apps, mais um plugin de Figma complementar.
A PARTE DIFÍCIL
O gerador de Figma constrói a sua árvore de nós de forma determinística - frames, retângulos e texto dispostos por código - e só depois oferece uma passagem opcional por um modelo para a embelezar. Essa ordem é todo o desenho: o mesmo projeto produz sempre o mesmo layout, e o modelo pode melhorar o resultado mas nunca é a razão da sua existência. O plugin vai buscar a sua especificação através de um URL de admin assinado, para que a aplicação de desktop do Figma possa obter um design sem manter uma sessão. Duas lacunas que não vou fingir estarem terminadas: o lado de envio da integração com o Figma ainda é um stub, e o cliente da OpenAI é importado sem estar fixado numa versão, pelo que uma instalação limpa desse painel falha até isso ser acrescentado.
282026
PROJETO 28
A plataforma em que este site corre - um processo para o site, o admin, a API e o funil
Um único processo Django renderiza um site público em sete idiomas e serve também o admin, uma API GraphQL, um formulário de leads em vários passos com códigos únicos por SMS e registos de consentimento tipificados, analítica first-party de visitantes com mapas de calor de cliques, um construtor de páginas, um sistema de marcações com reuniões Zoom e lembretes, páginas de erro, modo de manutenção e estado do servidor. O bundle de React é construído na minha máquina e carregado já compilado, porque a biblioteca C do alojamento é demasiado antiga para correr um Node atual.
StripeSMSAPIMeta PixelMeta Conversions APITikTok PixelGoogle Tag ManagerreCAPTCHASMTPZoom
STACK
Python 3.11 e Django 5.2 LTS, django-unfold, MySQL através de PyMySQL, Redis, Celery com beat, resultados e Flower, Strawberry GraphQL com a extensão de otimização para Django, modeltranslation, Silk apenas em desenvolvimento, React 18 e Vite para a ilha de front-end. Dez apps, trinta e três modelos, cerca de oito mil e duzentas linhas de Python.
A PARTE DIFÍCIL
O tracking de conversões dispara duas vezes de propósito: o pixel do browser e a API do lado do servidor enviam o mesmo evento com o mesmo event id, para que a plataforma os desduplique, e os eventos que os bloqueadores removeriam - normalmente entre um quinto e dois quintos deles - sobrevivem. Os campos pessoais são passados por hash antes de saírem, e uma falha de tracking é engolida em vez de propagada, porque vale mais um lead do que um lead perfeitamente reportado. O motor de formulários são nove modelos e doze tipos de pergunta sobre um funil de cinco estados com um registo de auditoria de eventos; os seus endpoints públicos estão deliberadamente isentos de CSRF, porque o markup é escrito no admin e servido tal e qual, e um id de sessão impossível de adivinhar, emitido pelo servidor, faz o trabalho que o token teria feito. Cada restrição de versão no ficheiro de requisitos traz a razão por que existe, incluindo as que eu preferia não ter de ter. O ponto fraco é a cobertura: vinte e três smoke tests contra oito mil linhas, o que não chega e eu sei disso.
Alguma coisa aqui se parece com o teu problema?
O padrão que se repete na maior parte destes é o mesmo: um negócio a funcionar com ferramentas que não sabem umas das outras. Se é o teu caso, diz e eu digo-te o que seria preciso, de facto, para as consolidar.