[{"data":1,"prerenderedAt":1378},["ShallowReactive",2],{"portfolio-doc-urbee-br":3},{"id":4,"title":5,"body":6,"description":1353,"extension":1354,"meta":1355,"navigation":1371,"path":1372,"seo":1373,"stem":1374,"__hash__":1375,"baseSlug":12,"localeTag":1376,"image":1357,"category":1356,"stack":1358,"tags":1377,"date":1370,"featured":1371},"portfolio/portfolio/urbee.pt-BR.md","URBEE",{"type":7,"value":8,"toc":1305},"minimark",[9,13,18,31,34,41,72,87,91,94,123,127,189,193,196,201,204,221,224,228,233,236,263,266,283,287,293,296,316,319,333,337,343,346,378,381,398,401,405,410,413,436,439,450,453,457,460,463,480,485,499,502,506,509,512,541,544,564,568,572,581,598,601,605,608,631,634,638,641,644,661,664,668,671,691,694,698,701,704,718,721,725,728,731,748,751,755,759,762,765,804,807,811,814,864,867,871,874,894,897,901,907,911,914,934,937,941,944,964,967,971,974,977,988,991,995,1002,1005,1019,1023,1026,1063,1066,1070,1073,1108,1111,1115,1118,1121,1141,1144,1148,1152,1155,1159,1162,1166,1169,1173,1176,1180,1183,1202,1205,1209,1212,1250,1256,1260,1295,1298],[10,11,5],"h1",{"id":12},"urbee",[14,15,17],"h2",{"id":16},"visão-geral-do-projeto","Visão Geral do Projeto",[19,20,21,22,26,27,30],"p",{},"URBEE é uma ",[23,24,25],"strong",{},"plataforma mobile-first de descoberta de eventos"," que idealizei e desenvolvi como um produto multiaplicação cobrindo ",[23,28,29],{},"descoberta para consumidores, planejamento social leve e operações de backend orientadas à ingestão",".",[19,32,33],{},"A ideia central era tornar a descoberta urbana mais limpa, rápida e confiável do que as plataformas tradicionais de eventos. Em vez de tratar eventos como um feed barulhento de classificados, a URBEE os trata como experiências curadas com contexto mais forte: categoria, bairro, horário, preço, identidade do organizador, prova social e proximidade no mapa.",[19,35,36,37,40],{},"O produto é estruturado como um ",[23,38,39],{},"monorepo com pnpm + Turborepo"," com:",[42,43,44,52,59,65],"ul",{},[45,46,47,48,51],"li",{},"um ",[23,49,50],{},"app mobile"," focado em descoberta e planejamento,",[45,53,54,55,58],{},"uma ",[23,56,57],{},"API em NestJS"," para catálogo, autenticação, social, gestão de fontes, ingestão, fluxos de revisão e callbacks de automação,",[45,60,54,61,64],{},[23,62,63],{},"base de app web"," para futura expansão em múltiplas superfícies,",[45,66,67,68,71],{},"e ",[23,69,70],{},"pacotes compartilhados"," para tipos e UI entre aplicações.",[19,73,74,75,78,79,82,83,86],{},"Este projeto é importante porque combina ",[23,76,77],{},"UX de produto para consumidor",", ",[23,80,81],{},"design de interação baseado em localização"," e ",[23,84,85],{},"pensamento de pipeline backend"," dentro do mesmo sistema. Não é apenas um conceito de frontend. É uma arquitetura de produto pensada para manter dados de eventos utilizáveis, atualizados e acionáveis socialmente.",[14,88,90],{"id":89},"meu-papel","Meu Papel",[19,92,93],{},"Eu construí a URBEE como um projeto completo de produto e engenharia, incluindo:",[42,95,96,99,102,105,108,111,114,117,120],{},[45,97,98],{},"Definição de produto e arquitetura da informação",[45,100,101],{},"UX mobile para descoberta, detalhe do evento, feed social, listas e fluxos de perfil",[45,103,104],{},"Arquitetura de monorepo com pacotes compartilhados",[45,106,107],{},"Design de API com NestJS + Fastify",[45,109,110],{},"Modelagem de domínio para usuários, organizadores, locais, eventos, listas, posts, follows, fontes, jobs de ingestão e itens da fila de revisão",[45,112,113],{},"Desenho de persistência com Prisma e estratégia de seed",[45,115,116],{},"Geração de contratos OpenAPI/Swagger",[45,118,119],{},"Desenho do workflow de ingestão com revisão e hooks de automação",[45,121,122],{},"Padrões de integração frontend/backend com React Query e requisições autenticadas",[14,124,126],{"id":125},"stack","Stack",[42,128,129,135,141,147,153,159,165,171,177,183],{},[45,130,131,134],{},[23,132,133],{},"Monorepo:"," pnpm, Turborepo",[45,136,137,140],{},[23,138,139],{},"Mobile:"," Expo, React Native, Expo Router, TypeScript",[45,142,143,146],{},[23,144,145],{},"Data Fetching:"," TanStack React Query",[45,148,149,152],{},[23,150,151],{},"UI/UX:"," Expo Image, Expo Haptics, Expo Location, React Native Maps, efeitos de Blur/Glass",[45,154,155,158],{},[23,156,157],{},"API:"," NestJS, Fastify, TypeScript",[45,160,161,164],{},[23,162,163],{},"Persistência:"," Prisma, PostgreSQL",[45,166,167,170],{},[23,168,169],{},"Serviços de Infra:"," Redis, Docker Compose",[45,172,173,176],{},[23,174,175],{},"Contratos:"," Swagger / OpenAPI",[45,178,179,182],{},[23,180,181],{},"Automação:"," integração de callback com n8n",[45,184,185,188],{},[23,186,187],{},"Pacotes Compartilhados:"," tipos e UI de workspace",[14,190,192],{"id":191},"visão-de-produto","Visão de Produto",[19,194,195],{},"URBEE foi desenhada em torno de um objetivo simples:",[19,197,198],{},[23,199,200],{},"Ajudar pessoas a descobrir o que está acontecendo na cidade e transformar essa descoberta em um plano real.",[19,202,203],{},"Isso significa que o app precisa resolver mais do que busca. Ele precisa suportar:",[42,205,206,209,212,215,218],{},[45,207,208],{},"navegação rápida quando o usuário ainda não sabe o que quer,",[45,210,211],{},"filtros por momento, categoria, preço e distância,",[45,213,214],{},"confiança nos detalhes do evento,",[45,216,217],{},"um fluxo de decisão orientado por mapa,",[45,219,220],{},"e mecânicas sociais leves para que descoberta possa virar coordenação.",[19,222,223],{},"A direção do produto é especialmente forte para grandes ambientes urbanos como São Paulo, onde a oferta de eventos é ampla, fragmentada e muitas vezes mal organizada entre sites-fonte e posts sociais.",[14,225,227],{"id":226},"o-que-eu-construí","O Que Eu Construí",[229,230,232],"h3",{"id":231},"_1-experiência-mobile-first-de-descoberta","1) Experiência Mobile-First de Descoberta",[19,234,235],{},"O app mobile é organizado em torno de cinco áreas principais de navegação:",[42,237,238,243,248,253,258],{},[45,239,240],{},[23,241,242],{},"Hoje",[45,244,245],{},[23,246,247],{},"Explorar",[45,249,250],{},[23,251,252],{},"Mapa",[45,254,255],{},[23,256,257],{},"Social",[45,259,260],{},[23,261,262],{},"Perfil",[19,264,265],{},"Essa estrutura espelha a forma como usuários reais exploram planos na cidade:",[42,267,268,271,274,277,280],{},[45,269,270],{},"começam por um feed diário,",[45,272,273],{},"seguem para exploração por categoria,",[45,275,276],{},"mudam para o modo mapa quando proximidade importa,",[45,278,279],{},"checam o que amigos ou organizadores seguidos estão fazendo,",[45,281,282],{},"e salvam ou revisitam planos a partir de perfil/listas.",[229,284,286],{"id":285},"_2-feed-inicial-projetado-para-descoberta-rápida","2) Feed Inicial Projetado para Descoberta Rápida",[19,288,289,290,292],{},"A aba ",[23,291,242],{}," foi construída como um feed em camadas de descoberta, e não como uma lista plana.",[19,294,295],{},"Ela inclui:",[42,297,298,301,304,307,310,313],{},[45,299,300],{},"um campo de busca para procura direta,",[45,302,303],{},"chips rápidos para atalhos por data e tags,",[45,305,306],{},"uma seção de tendências com cards visuais,",[45,308,309],{},"cards de eventos com imagem, data, bairro, tags e preço,",[45,311,312],{},"ações de salvar e compartilhar diretamente no card,",[45,314,315],{},"e uma seção de feed social mostrando atividade em torno de eventos.",[19,317,318],{},"Isso oferece ao usuário múltiplos pontos de entrada para a descoberta:",[42,320,321,324,327,330],{},[45,322,323],{},"navegar por momento,",[45,325,326],{},"navegar por tema,",[45,328,329],{},"navegar por contexto social,",[45,331,332],{},"ou ir direto para um evento específico.",[229,334,336],{"id":335},"_3-exploração-por-categorias","3) Exploração por Categorias",[19,338,339,340,342],{},"A área ",[23,341,247],{}," transforma descoberta ampla em um fluxo de navegação mais intencional.",[19,344,345],{},"Os usuários podem entrar em categorias como:",[42,347,348,351,354,357,360,363,366,369,372,375],{},[45,349,350],{},"Musica",[45,352,353],{},"Arte",[45,355,356],{},"Cinema",[45,358,359],{},"Teatro",[45,361,362],{},"Gastronomia",[45,364,365],{},"Cursos",[45,367,368],{},"Bem-estar",[45,370,371],{},"Esportes",[45,373,374],{},"Infantil",[45,376,377],{},"Festa",[19,379,380],{},"Dentro de cada categoria, a experiência suporta:",[42,382,383,386,389,392,395],{},[45,384,385],{},"filtros temporais como hoje, amanhã e fim de semana,",[45,387,388],{},"filtros de preço de gratuito até faixas econômicas,",[45,390,391],{},"modos de ordenação como tendência, mais próximos e mais baratos,",[45,393,394],{},"scroll infinito,",[45,396,397],{},"e controles de filtro em modal que mantêm a experiência mobile limpa.",[19,399,400],{},"Isso é importante porque apps de descoberta falham quando forçam o mesmo layout para todo mundo. A URBEE oferece tanto navegação rápida quanto refinamento estruturado.",[229,402,404],{"id":403},"_4-descoberta-de-eventos-baseada-em-mapa","4) Descoberta de Eventos Baseada em Mapa",[19,406,407,408,30],{},"Uma das funcionalidades de usabilidade mais fortes é a aba ",[23,409,252],{},[19,411,412],{},"Em dispositivos mobile nativos, implementei:",[42,414,415,418,421,424,427,430,433],{},[45,416,417],{},"fluxo de permissão de localização em tempo real,",[45,419,420],{},"mapa centralizado no usuário ou em uma região padrão de São Paulo,",[45,422,423],{},"marcadores de eventos com preço visível,",[45,425,426],{},"seleção de marcador conectada a uma bottom sheet colapsável,",[45,428,429],{},"filtros por data e raio,",[45,431,432],{},"interação de “buscar nesta área” após mover a região,",[45,434,435],{},"e uma visualização em lista de eventos próximos abaixo do mapa.",[19,437,438],{},"Isso atende a comportamentos muito práticos do usuário:",[42,440,441,444,447],{},[45,442,443],{},"“me mostra o que está acontecendo perto de mim”,",[45,445,446],{},"“me mostra o que está acontecendo neste bairro hoje à noite”,",[45,448,449],{},"ou “vou para outra parte da cidade, o que existe por lá?”",[19,451,452],{},"O valor de usabilidade aqui é alto porque decisões sobre eventos muitas vezes são geográficas antes de serem temáticas.",[229,454,456],{"id":455},"_5-camada-social-de-planejamento","5) Camada Social de Planejamento",[19,458,459],{},"A URBEE não é uma rede social completa. Ela usa recursos sociais onde eles realmente adicionam utilidade ao planejamento.",[19,461,462],{},"A estrutura atual suporta:",[42,464,465,468,471,474,477],{},[45,466,467],{},"listas pessoais salvas,",[45,469,470],{},"atividade de feed relacionada a eventos,",[45,472,473],{},"seguir organizadores,",[45,475,476],{},"posts e atualizações de eventos no feed,",[45,478,479],{},"e estatísticas em nível de perfil que tornam visível o comportamento de salvar/planejar.",[19,481,289,482,484],{},[23,483,257],{}," exibe atividade de usuários vinculada a eventos, incluindo:",[42,486,487,490,493,496],{},[45,488,489],{},"quem quer ir,",[45,491,492],{},"a qual evento a pessoa está se referindo,",[45,494,495],{},"um comentário curto,",[45,497,498],{},"e ações rápidas como curtir, comentar intenção e compartilhar.",[19,500,501],{},"Essa é uma escolha deliberada de produto. A camada social existe para reduzir atrito no planejamento e aumentar confiança por meio da descoberta compartilhada, não para sobrecarregar o produto com mecânicas genéricas de engajamento.",[229,503,505],{"id":504},"_6-detalhe-do-evento-como-tela-de-conversão","6) Detalhe do Evento como Tela de Conversão",[19,507,508],{},"A tela de detalhe do evento é onde navegação vira intenção.",[19,510,511],{},"Eu a construí para consolidar as informações mais críticas para a decisão:",[42,513,514,517,520,523,526,529,532,535,538],{},[45,515,516],{},"mídia principal,",[45,518,519],{},"título e tags,",[45,521,522],{},"apresentação completa de data/hora,",[45,524,525],{},"contexto de local e bairro,",[45,527,528],{},"estado de ingresso ou entrada gratuita,",[45,530,531],{},"contagem de participantes/prova social,",[45,533,534],{},"descrição completa,",[45,536,537],{},"ações de salvar e compartilhar,",[45,539,540],{},"e um CTA principal que alterna entre “Confirmar presenca” e “Comprar ingresso”.",[19,542,543],{},"Essa tela foi estruturada para responder rapidamente às perguntas práticas:",[42,545,546,549,552,555,558,561],{},[45,547,548],{},"O que é isso?",[45,550,551],{},"Quando é?",[45,553,554],{},"Onde é?",[45,556,557],{},"É gratuito ou pago?",[45,559,560],{},"Outras pessoas estão interessadas?",[45,562,563],{},"Quero salvar, compartilhar ou ir agora?",[14,565,567],{"id":566},"usabilidade-detalhada-e-fluxos-de-usuário","Usabilidade Detalhada e Fluxos de Usuário",[229,569,571],{"id":570},"onboarding-e-acesso","Onboarding e Acesso",[19,573,574,575,82,578,40],{},"O app inclui fluxos dedicados de ",[23,576,577],{},"login",[23,579,580],{},"cadastro",[42,582,583,586,589,592,595],{},[45,584,585],{},"campos claros de credenciais,",[45,587,588],{},"validação para dados ausentes,",[45,590,591],{},"alternância de visibilidade de senha,",[45,593,594],{},"estados de carregamento,",[45,596,597],{},"e navegação protegida para que usuários não autenticados sejam redirecionados antes de acessar as abas principais.",[19,599,600],{},"Isso cria um caminho direto da criação de conta até o produto, sem fricção desnecessária.",[229,602,604],{"id":603},"escaneamento-rápido-e-tomada-de-decisão","Escaneamento Rápido e Tomada de Decisão",[19,606,607],{},"Ao longo da experiência mobile, a UI foi otimizada para leitura rápida:",[42,609,610,613,616,619,622,625,628],{},[45,611,612],{},"cards visuais fortes,",[45,614,615],{},"linhas curtas de metadados,",[45,617,618],{},"uso persistente de bairro e preço,",[45,620,621],{},"pills compactas de tags,",[45,623,624],{},"skeletons de carregamento,",[45,626,627],{},"empty states,",[45,629,630],{},"e feedback háptico em interações-chave.",[19,632,633],{},"O resultado é um produto que ajuda usuários a tomar uma decisão em segundos, em vez de forçá-los a interpretar listas densas de eventos.",[229,635,637],{"id":636},"filtros-sem-complicação","Filtros Sem Complicação",[19,639,640],{},"Os filtros são tratados como uma ferramenta leve de decisão, não como um formulário pesado de busca.",[19,642,643],{},"A abordagem de usabilidade é:",[42,645,646,649,652,655,658],{},[45,647,648],{},"mostrar primeiro os filtros mais comuns,",[45,650,651],{},"manter a tela de categoria focada em resultados,",[45,653,654],{},"mover escolhas avançadas para uma bottom sheet/modal,",[45,656,657],{},"tornar filtros ativos visíveis,",[45,659,660],{},"e manter a ordenação fácil de alterar durante a navegação.",[19,662,663],{},"Isso equilibra velocidade e controle, o que é essencial em um produto de descoberta.",[229,665,667],{"id":666},"exploração-guiada-por-proximidade","Exploração Guiada por Proximidade",[19,669,670],{},"O fluxo do mapa foi desenhado em torno do comportamento real em mobile:",[42,672,673,676,679,682,685,688],{},[45,674,675],{},"o usuário concede localização,",[45,677,678],{},"vê eventos distribuídos espacialmente,",[45,680,681],{},"ajusta o raio,",[45,683,684],{},"move o mapa para outra região,",[45,686,687],{},"toca em “buscar aqui”,",[45,689,690],{},"e abre o evento diretamente pela sheet ou pelo contexto do marcador.",[19,692,693],{},"Isso é mais útil do que um mapa passivo embutido. Vira uma superfície real de descoberta.",[229,695,697],{"id":696},"conteúdo-salvo-e-retorno-ao-app","Conteúdo Salvo e Retorno ao App",[19,699,700],{},"Eventos salvos e listas são um mecanismo importante de retenção.",[19,702,703],{},"O design atual do produto suporta:",[42,705,706,709,712,715],{},[45,707,708],{},"salvar a partir do feed,",[45,710,711],{},"salvar a partir do detalhe do evento,",[45,713,714],{},"lógica automática/padrão de lista salva no backend,",[45,716,717],{},"e exibição de totais de listas na área de perfil.",[19,719,720],{},"Isso faz a URBEE ser útil tanto para decisões imediatas quanto para planejamento mais lento ao longo da semana.",[229,722,724],{"id":723},"prova-social-sem-ruído","Prova Social Sem Ruído",[19,726,727],{},"A experiência social é intencionalmente contida.",[19,729,730],{},"Em vez de tentar virar um feed genérico de conteúdo, a URBEE conecta atividade à intenção de evento:",[42,732,733,736,739,742,745],{},[45,734,735],{},"pessoas querendo participar,",[45,737,738],{},"comentários curtos,",[45,740,741],{},"curtidas,",[45,743,744],{},"relações de follow com organizadores,",[45,746,747],{},"e atualizações ligadas aos organizadores.",[19,749,750],{},"Isso melhora relevância e mantém o feed alinhado com o propósito do produto.",[14,752,754],{"id":753},"arquitetura-de-backend-e-produto","Arquitetura de Backend e Produto",[229,756,758],{"id":757},"estrutura-de-monorepo","Estrutura de Monorepo",[19,760,761],{},"Organizei a base de código em um monorepo compartilhado para que contratos de produto não fossem duplicados entre superfícies.",[19,763,764],{},"As áreas principais são:",[42,766,767,774,780,786,792,798],{},[45,768,769,773],{},[770,771,772],"code",{},"apps/mobile"," para o app em Expo",[45,775,776,779],{},[770,777,778],{},"apps/api"," para a API em NestJS",[45,781,782,785],{},[770,783,784],{},"apps/web"," para a base da superfície web",[45,787,788,791],{},[770,789,790],{},"packages/types"," para contratos de domínio compartilhados",[45,793,794,797],{},[770,795,796],{},"packages/ui"," para UI web compartilhada",[45,799,800,803],{},[770,801,802],{},"packages/config"," para padrões de lint, formatação e TypeScript",[19,805,806],{},"Esse setup melhora consistência e facilita evoluir o produto entre mobile e web sem desalinhar modelos.",[229,808,810],{"id":809},"módulos-da-api","Módulos da API",[19,812,813],{},"A API é dividida em módulos focados:",[42,815,816,822,828,834,840,846,852,858],{},[45,817,818,821],{},[23,819,820],{},"identity"," para autenticação e acesso ao usuário atual",[45,823,824,827],{},[23,825,826],{},"catalog"," para recuperação de eventos e organizadores",[45,829,830,833],{},[23,831,832],{},"social"," para listas, follows e composição do feed",[45,835,836,839],{},[23,837,838],{},"sources"," para configuração de fontes",[45,841,842,845],{},[23,843,844],{},"ingestion"," para execuções de pipeline e auditoria de jobs",[45,847,848,851],{},[23,849,850],{},"review"," para aprovação/rejeição humana de itens extraídos com baixa confiança",[45,853,854,857],{},[23,855,856],{},"automation"," para callbacks seguros do n8n",[45,859,860,863],{},[23,861,862],{},"system"," para health checks",[19,865,866],{},"Isso dá à API uma forma clara orientada a produto, em vez de uma estrutura genérica de CRUD.",[229,868,870],{"id":869},"fluxos-autenticados-do-produto","Fluxos Autenticados do Produto",[19,872,873],{},"O backend suporta:",[42,875,876,879,882,885,888,891],{},[45,877,878],{},"endpoints de cadastro e login,",[45,880,881],{},"acesso autenticado baseado em JWT,",[45,883,884],{},"recuperação do usuário atual,",[45,886,887],{},"acesso autenticado a listas,",[45,889,890],{},"ações autenticadas de follow,",[45,892,893],{},"e operações autenticadas de ingestão/revisão.",[19,895,896],{},"Essa separação importa porque a URBEE inclui tanto funcionalidades voltadas ao consumidor quanto ferramentas operacionais.",[14,898,900],{"id":899},"dados-de-eventos-confiança-e-ingestão","Dados de Eventos, Confiança e Ingestão",[19,902,903,904,30],{},"Uma das partes mais fortes da URBEE como projeto de portfólio é que ela enfrenta o lado difícil de produtos de eventos: ",[23,905,906],{},"qualidade de dados",[229,908,910],{"id":909},"gestão-de-fontes","Gestão de Fontes",[19,912,913],{},"O backend inclui definições de fonte com configurações como:",[42,915,916,919,922,925,928,931],{},[45,917,918],{},"nome da fonte,",[45,920,921],{},"URL base,",[45,923,924],{},"cidade,",[45,926,927],{},"tipo da fonte,",[45,929,930],{},"peso de confiança,",[45,932,933],{},"e configuração de rate limit.",[19,935,936],{},"Essa é a base para tratar ingestão de eventos como um sistema gerenciado, e não como um problema manual de planilha.",[229,938,940],{"id":939},"pensamento-de-pipeline-de-ingestão","Pensamento de Pipeline de Ingestão",[19,942,943],{},"O módulo de ingestão suporta:",[42,945,946,949,952,955,958,961],{},[45,947,948],{},"disparar ingestão por fonte ou cidade,",[45,950,951],{},"criação de jobs de ingestão,",[45,953,954],{},"registro de tentativas de extração,",[45,956,957],{},"armazenamento de execuções,",[45,959,960],{},"acompanhamento de níveis de confiança,",[45,962,963],{},"e exigência de revisão quando a confiança da extração fica abaixo do limite.",[19,965,966],{},"Isso é valioso porque plataformas de eventos só são úteis na medida em que seus dados permanecem frescos e confiáveis.",[229,968,970],{"id":969},"revisão-com-humano-no-loop","Revisão com Humano no Loop",[19,972,973],{},"A URBEE inclui um modelo de fila de revisão para resultados de extração com baixa confiança.",[19,975,976],{},"Isso significa que a plataforma foi desenhada para um fluxo híbrido prático:",[42,978,979,982,985],{},[45,980,981],{},"automação quando a confiança é alta,",[45,983,984],{},"aprovação humana quando a confiança é menor,",[45,986,987],{},"e transições auditáveis de estado para itens em revisão.",[19,989,990],{},"Essa é uma abordagem mais próxima de produção do que simplesmente raspar páginas e confiar cegamente em tudo.",[229,992,994],{"id":993},"hooks-de-automação","Hooks de Automação",[19,996,997,998,1001],{},"Também construí um endpoint seguro de ",[23,999,1000],{},"callback para n8n"," para que workflows externos possam reportar o status de execução dos jobs de volta para a plataforma.",[19,1003,1004],{},"Isso permite que a URBEE evolua para padrões operacionais mais robustos, como:",[42,1006,1007,1010,1013,1016],{},[45,1008,1009],{},"ingestão agendada,",[45,1011,1012],{},"tratamento de falhas,",[45,1014,1015],{},"enriquecimento assíncrono,",[45,1017,1018],{},"e fluxos de automação com múltiplas etapas.",[14,1020,1022],{"id":1021},"modelagem-de-dados","Modelagem de Dados",[19,1024,1025],{},"O modelo de domínio cobre as entidades centrais necessárias para esse tipo de plataforma:",[42,1027,1028,1031,1034,1037,1040,1043,1046,1049,1051,1054,1057,1060],{},[45,1029,1030],{},"users",[45,1032,1033],{},"organizer profiles",[45,1035,1036],{},"venues",[45,1038,1039],{},"events",[45,1041,1042],{},"lists and list items",[45,1044,1045],{},"follows",[45,1047,1048],{},"posts",[45,1050,838],{},[45,1052,1053],{},"ingestion jobs",[45,1055,1056],{},"extraction attempts",[45,1058,1059],{},"ingestion executions",[45,1061,1062],{},"review queue items",[19,1064,1065],{},"Isso é importante em termos de portfólio porque mostra pensamento de sistema de produto, não apenas construção de telas.",[14,1067,1069],{"id":1068},"contexto-de-produto-com-seed","Contexto de Produto com Seed",[19,1071,1072],{},"Para tornar o sistema utilizável em desenvolvimento, eu populei a base com entidades realistas inspiradas em São Paulo, incluindo:",[42,1074,1075,1087,1102,1105],{},[45,1076,1077,1078,78,1081,82,1084],{},"organizadores como ",[23,1079,1080],{},"Mamba Negra",[23,1082,1083],{},"Gop Tun",[23,1085,1086],{},"Casa Natura",[45,1088,1089,1090,78,1093,78,1096,82,1099],{},"locais como ",[23,1091,1092],{},"Audio Club",[23,1094,1095],{},"MIS",[23,1097,1098],{},"SESC Pompeia",[23,1100,1101],{},"Parque Ibirapuera",[45,1103,1104],{},"múltiplos eventos públicos com categorias, tags, preços, URLs de origem e scores de confiança",[45,1106,1107],{},"e posts associados a organizadores e membros",[19,1109,1110],{},"Isso ajudou a validar os fluxos de descoberta, social e ingestão sobre um contexto urbano crível.",[14,1112,1114],{"id":1113},"direção-de-design-e-frontend","Direção de Design e Frontend",[19,1116,1117],{},"A interface mobile foi intencionalmente desenhada para não parecer um app utilitário genérico.",[19,1119,1120],{},"A direção de design foca em:",[42,1122,1123,1126,1129,1132,1135,1138],{},[45,1124,1125],{},"tratamento visual escuro e adequado à vida noturna,",[45,1127,1128],{},"cards grandes com mídia,",[45,1130,1131],{},"apresentação de metadados com forte contraste,",[45,1133,1134],{},"interações táteis via feedback háptico,",[45,1136,1137],{},"descoberta orientada por mapa em dispositivos nativos,",[45,1139,1140],{},"e padrões de motion/feedback que fazem o app parecer ativo e moderno.",[19,1142,1143],{},"Tratei a experiência como um produto de lifestyle/descoberta, e não como um diretório simples de eventos.",[14,1145,1147],{"id":1146},"decisões-de-engenharia-que-importam","Decisões de Engenharia Que Importam",[229,1149,1151],{"id":1150},"_1-arquitetura-de-produto-mobile-first","1) Arquitetura de Produto Mobile-First",[19,1153,1154],{},"Eu priorizei a experiência nativa mobile porque descoberta de eventos, contexto de localização e planejamento de última hora são comportamentos naturalmente mobile.",[229,1156,1158],{"id":1157},"_2-contratos-compartilhados-entre-apps","2) Contratos Compartilhados Entre Apps",[19,1160,1161],{},"A estrutura de monorepo e a estratégia de pacotes compartilhados reduzem duplicação e criam um caminho mais limpo para escalar o produto entre superfícies.",[229,1163,1165],{"id":1164},"_3-pensamento-de-backoffice-operacional","3) Pensamento de Backoffice Operacional",[19,1167,1168],{},"A API faz mais do que servir listas de eventos. Ela também modela jobs de ingestão, estados de revisão, gestão de fontes e callbacks de automação. Isso torna o projeto muito mais realista como sistema de produto.",[229,1170,1172],{"id":1171},"_4-separação-clara-entre-ux-de-descoberta-e-infraestrutura-operacional","4) Separação Clara Entre UX de Descoberta e Infraestrutura Operacional",[19,1174,1175],{},"Os usuários veem um produto polido de descoberta, enquanto o backend está preparado para orquestração de fontes e fluxos de confiança. Essa separação é uma escolha forte de engenharia para manutenção de longo prazo.",[14,1177,1179],{"id":1178},"estado-atual-do-produto","Estado Atual do Produto",[19,1181,1182],{},"Hoje, a URBEE pode ser descrita da melhor forma como:",[42,1184,1185,1191,1196],{},[45,1186,47,1187,1190],{},[23,1188,1189],{},"produto mobile de descoberta substancialmente construído",",",[45,1192,54,1193,1190],{},[23,1194,1195],{},"base backend bem estruturada para fluxos de catálogo/social/ingestão",[45,1197,1198,1199,30],{},"e uma ",[23,1200,1201],{},"superfície web pronta para expansão, mas ainda não concluída em termos de funcionalidades",[19,1203,1204],{},"Essa distinção importa. Prefiro apresentar o produto com honestidade como um sistema sério de mobile + API com uma camada web em crescimento, em vez de inflar artificialmente o que o app web já faz hoje.",[14,1206,1208],{"id":1207},"por-que-este-projeto-importa-no-meu-portfólio","Por Que Este Projeto Importa no Meu Portfólio",[19,1210,1211],{},"A URBEE demonstra que eu consigo entregar:",[42,1213,1214,1219,1225,1230,1235,1240,1245],{},[45,1215,1216,1218],{},[23,1217,77],{},", não apenas landing pages",[45,1220,1221,1224],{},[23,1222,1223],{},"arquitetura de app mobile"," com navegação real e fluxos de estado",[45,1226,1227],{},[23,1228,1229],{},"interfaces de descoberta sensíveis à localização",[45,1231,1232],{},[23,1233,1234],{},"funcionalidades sociais com utilidade ligada ao propósito do produto",[45,1236,1237],{},[23,1238,1239],{},"sistemas backend para confiabilidade operacional",[45,1241,1242],{},[23,1243,1244],{},"modelagem de dados para plataformas com múltiplas entidades",[45,1246,1247],{},[23,1248,1249],{},"design de API e automação além de CRUD simples",[19,1251,1252,1253,30],{},"Ela mostra minha capacidade de atuar em toda a stack de um produto onde ",[23,1254,1255],{},"qualidade do conteúdo, confiança, usabilidade e arquitetura importam ao mesmo tempo",[14,1257,1259],{"id":1258},"palavras-chave-serviços-para-freelancing","Palavras-chave / Serviços para Freelancing",[42,1261,1262,1265,1268,1271,1274,1277,1280,1283,1286,1289,1292],{},[45,1263,1264],{},"Desenvolvimento mobile com Expo e React Native",[45,1266,1267],{},"Desenvolvimento de plataforma de descoberta de eventos",[45,1269,1270],{},"Design de produto baseado em localização",[45,1272,1273],{},"Funcionalidades sociais de planejamento e conteúdo salvo",[45,1275,1276],{},"Arquitetura de API com NestJS",[45,1278,1279],{},"Sistemas backend com Prisma + PostgreSQL",[45,1281,1282],{},"OpenAPI e design de contratos de API",[45,1284,1285],{},"Arquitetura de workflow de ingestão",[45,1287,1288],{},"Sistemas de revisão com humano no loop",[45,1290,1291],{},"Arquitetura de monorepo com contratos TypeScript compartilhados",[45,1293,1294],{},"Desenvolvimento full-stack orientado a produto",[1296,1297],"hr",{},[19,1299,1300,1301,1304],{},"Se você precisa de um ",[23,1302,1303],{},"produto mobile-first"," que combine UX forte, estrutura backend real e modelagem de domínio cuidadosa, a URBEE representa o tipo de sistema que eu construo.",{"title":1306,"searchDepth":1307,"depth":1307,"links":1308},"",2,[1309,1310,1311,1312,1313,1322,1330,1335,1341,1342,1343,1344,1350,1351,1352],{"id":16,"depth":1307,"text":17},{"id":89,"depth":1307,"text":90},{"id":125,"depth":1307,"text":126},{"id":191,"depth":1307,"text":192},{"id":226,"depth":1307,"text":227,"children":1314},[1315,1317,1318,1319,1320,1321],{"id":231,"depth":1316,"text":232},3,{"id":285,"depth":1316,"text":286},{"id":335,"depth":1316,"text":336},{"id":403,"depth":1316,"text":404},{"id":455,"depth":1316,"text":456},{"id":504,"depth":1316,"text":505},{"id":566,"depth":1307,"text":567,"children":1323},[1324,1325,1326,1327,1328,1329],{"id":570,"depth":1316,"text":571},{"id":603,"depth":1316,"text":604},{"id":636,"depth":1316,"text":637},{"id":666,"depth":1316,"text":667},{"id":696,"depth":1316,"text":697},{"id":723,"depth":1316,"text":724},{"id":753,"depth":1307,"text":754,"children":1331},[1332,1333,1334],{"id":757,"depth":1316,"text":758},{"id":809,"depth":1316,"text":810},{"id":869,"depth":1316,"text":870},{"id":899,"depth":1307,"text":900,"children":1336},[1337,1338,1339,1340],{"id":909,"depth":1316,"text":910},{"id":939,"depth":1316,"text":940},{"id":969,"depth":1316,"text":970},{"id":993,"depth":1316,"text":994},{"id":1021,"depth":1307,"text":1022},{"id":1068,"depth":1307,"text":1069},{"id":1113,"depth":1307,"text":1114},{"id":1146,"depth":1307,"text":1147,"children":1345},[1346,1347,1348,1349],{"id":1150,"depth":1316,"text":1151},{"id":1157,"depth":1316,"text":1158},{"id":1164,"depth":1316,"text":1165},{"id":1171,"depth":1316,"text":1172},{"id":1178,"depth":1307,"text":1179},{"id":1207,"depth":1307,"text":1208},{"id":1258,"depth":1307,"text":1259},"Uma plataforma mobile-first de descoberta de eventos com planejamento social, exploração por mapa e arquitetura backend orientada à ingestão.","md",{"category":1356,"image":1357,"stack":1358,"tags":1359,"date":1370,"featured":1371},"Produto Mobile","/images/works/urbee.png","Expo, React Native, NestJS, Fastify, Prisma, PostgreSQL, Turborepo",[1360,1361,1362,1363,1364,1365,1366,1367,1368,1369],"Expo","React Native","NestJS","Fastify","Prisma","PostgreSQL","Product Design","Geolocalizacao","Descoberta de Eventos","Monorepo","2026-03-09",true,"/portfolio/urbee",{"title":5,"description":1353},"portfolio/urbee.pt-BR","EdIiJJenzryhCC3YeicqNY-P6RyVVVVsgbN7xhjUIrA","pt-br",[1360,1361,1362,1363,1364,1365,1366,1367,1368,1369],1773091123851]