[{"data":1,"prerenderedAt":1379},["ShallowReactive",2],{"portfolio-doc-urbee-en":3},{"id":4,"title":5,"body":6,"description":1354,"extension":1355,"meta":1356,"navigation":1372,"path":1373,"seo":1374,"stem":1375,"__hash__":1376,"baseSlug":12,"localeTag":1377,"image":1358,"category":1357,"stack":1359,"tags":1378,"date":1371,"featured":1372},"portfolio/portfolio/urbee.md","URBEE",{"type":7,"value":8,"toc":1306},"minimark",[9,13,18,31,34,41,71,86,90,93,122,126,188,192,195,200,203,220,223,227,232,235,262,265,282,286,292,295,315,318,332,336,341,344,376,379,396,399,403,409,412,435,438,449,452,456,459,462,479,484,498,501,505,508,511,540,543,563,567,571,582,599,602,606,609,632,635,639,642,645,662,665,669,672,692,695,699,702,705,719,722,726,729,732,749,752,756,760,763,766,805,808,812,815,865,868,872,875,895,898,902,908,912,915,935,938,942,945,965,968,972,975,978,989,992,996,1003,1006,1020,1024,1027,1064,1067,1071,1074,1109,1112,1116,1119,1122,1142,1145,1149,1153,1156,1160,1163,1167,1170,1174,1177,1181,1184,1203,1206,1210,1213,1251,1257,1261,1296,1299],[10,11,5],"h1",{"id":12},"urbee",[14,15,17],"h2",{"id":16},"project-overview","Project Overview",[19,20,21,22,26,27,30],"p",{},"URBEE is a ",[23,24,25],"strong",{},"mobile-first event discovery platform"," I designed and engineered as a multi-app product covering ",[23,28,29],{},"consumer discovery, lightweight social planning, and ingestion-oriented backend operations",".",[19,32,33],{},"The core idea was to make urban discovery feel cleaner, faster, and more trustworthy than traditional event platforms. Instead of treating events like a noisy classifieds feed, URBEE treats them as curated experiences with stronger context: category, neighborhood, timing, price, organizer identity, social proof, and map proximity.",[19,35,36,37,40],{},"The product is structured as a ",[23,38,39],{},"pnpm + Turborepo monorepo"," with:",[42,43,44,52,58,64],"ul",{},[45,46,47,48,51],"li",{},"a ",[23,49,50],{},"mobile app"," focused on discovery and planning,",[45,53,47,54,57],{},[23,55,56],{},"NestJS API"," for catalog, auth, social, source management, ingestion, review flows, and automation callbacks,",[45,59,47,60,63],{},[23,61,62],{},"web app foundation"," for future multi-surface expansion,",[45,65,66,67,70],{},"and ",[23,68,69],{},"shared packages"," for cross-app types and UI.",[19,72,73,74,77,78,81,82,85],{},"This project matters because it combines ",[23,75,76],{},"consumer product UX",", ",[23,79,80],{},"location-based interaction design",", and ",[23,83,84],{},"backend pipeline thinking"," in the same system. It is not just a frontend concept. It is a product architecture for keeping event data usable, current, and socially actionable.",[14,87,89],{"id":88},"my-role","My Role",[19,91,92],{},"I built URBEE as an end-to-end product and engineering project, including:",[42,94,95,98,101,104,107,110,113,116,119],{},[45,96,97],{},"Product definition and information architecture",[45,99,100],{},"Mobile UX for discovery, event detail, social feed, lists, and profile flows",[45,102,103],{},"Monorepo architecture with shared packages",[45,105,106],{},"API design with NestJS + Fastify",[45,108,109],{},"Domain modeling for users, organizers, venues, events, lists, posts, follows, sources, ingestion jobs, and review queue items",[45,111,112],{},"Prisma persistence design and seed strategy",[45,114,115],{},"OpenAPI/Swagger contract generation",[45,117,118],{},"Ingestion workflow design with review and automation hooks",[45,120,121],{},"Frontend/backend integration patterns with React Query and authenticated requests",[14,123,125],{"id":124},"stack","Stack",[42,127,128,134,140,146,152,158,164,170,176,182],{},[45,129,130,133],{},[23,131,132],{},"Monorepo:"," pnpm, Turborepo",[45,135,136,139],{},[23,137,138],{},"Mobile:"," Expo, React Native, Expo Router, TypeScript",[45,141,142,145],{},[23,143,144],{},"Data Fetching:"," TanStack React Query",[45,147,148,151],{},[23,149,150],{},"UI/UX:"," Expo Image, Expo Haptics, Expo Location, React Native Maps, Blur/Glass effects",[45,153,154,157],{},[23,155,156],{},"API:"," NestJS, Fastify, TypeScript",[45,159,160,163],{},[23,161,162],{},"Persistence:"," Prisma, PostgreSQL",[45,165,166,169],{},[23,167,168],{},"Infra Services:"," Redis, Docker Compose",[45,171,172,175],{},[23,173,174],{},"Contracts:"," Swagger / OpenAPI",[45,177,178,181],{},[23,179,180],{},"Automation:"," n8n callback integration",[45,183,184,187],{},[23,185,186],{},"Shared Packages:"," workspace types and UI",[14,189,191],{"id":190},"product-vision","Product Vision",[19,193,194],{},"URBEE was designed around a simple product goal:",[19,196,197],{},[23,198,199],{},"Help people discover what is happening in the city and turn that discovery into an actual plan.",[19,201,202],{},"That means the app has to solve more than search. It has to support:",[42,204,205,208,211,214,217],{},[45,206,207],{},"quick browsing when the user does not know what they want yet,",[45,209,210],{},"filtering by moment, category, price, and distance,",[45,212,213],{},"confidence in event details,",[45,215,216],{},"a map-first decision flow,",[45,218,219],{},"and lightweight social mechanics so discovery can become coordination.",[19,221,222],{},"The product direction is especially strong for large urban environments like Sao Paulo, where event supply is broad, fragmented, and often poorly organized across source websites and social posts.",[14,224,226],{"id":225},"what-i-built","What I Built",[228,229,231],"h3",{"id":230},"_1-mobile-first-discovery-experience","1) Mobile-First Discovery Experience",[19,233,234],{},"The mobile app is organized around five core navigation areas:",[42,236,237,242,247,252,257],{},[45,238,239],{},[23,240,241],{},"Hoje",[45,243,244],{},[23,245,246],{},"Explorar",[45,248,249],{},[23,250,251],{},"Mapa",[45,253,254],{},[23,255,256],{},"Social",[45,258,259],{},[23,260,261],{},"Perfil",[19,263,264],{},"This structure mirrors how real users browse city plans:",[42,266,267,270,273,276,279],{},[45,268,269],{},"start from a daily feed,",[45,271,272],{},"branch into category exploration,",[45,274,275],{},"switch to map mode when proximity matters,",[45,277,278],{},"check what friends or followed organizers are doing,",[45,280,281],{},"and save or revisit plans from profile/lists.",[228,283,285],{"id":284},"_2-home-feed-designed-for-fast-discovery","2) Home Feed Designed for Fast Discovery",[19,287,288,289,291],{},"The ",[23,290,241],{}," tab is built as a layered discovery feed instead of a flat list.",[19,293,294],{},"It includes:",[42,296,297,300,303,306,309,312],{},[45,298,299],{},"a search input for direct lookup,",[45,301,302],{},"quick chips for date and tag-based shortcuts,",[45,304,305],{},"a trending section with visual cards,",[45,307,308],{},"event cards with image, date, neighborhood, tags, and price,",[45,310,311],{},"save and share actions directly on the card,",[45,313,314],{},"and a social feed section that shows activity around events.",[19,316,317],{},"This gives the user multiple entry points into discovery:",[42,319,320,323,326,329],{},[45,321,322],{},"browse by momentum,",[45,324,325],{},"browse by theme,",[45,327,328],{},"browse by social context,",[45,330,331],{},"or jump directly into a specific event.",[228,333,335],{"id":334},"_3-category-based-exploration","3) Category-Based Exploration",[19,337,288,338,340],{},[23,339,246],{}," area turns broad discovery into a more intentional browsing flow.",[19,342,343],{},"Users can enter categories such as:",[42,345,346,349,352,355,358,361,364,367,370,373],{},[45,347,348],{},"Musica",[45,350,351],{},"Arte",[45,353,354],{},"Cinema",[45,356,357],{},"Teatro",[45,359,360],{},"Gastronomia",[45,362,363],{},"Cursos",[45,365,366],{},"Bem-estar",[45,368,369],{},"Esportes",[45,371,372],{},"Infantil",[45,374,375],{},"Festa",[19,377,378],{},"Inside each category, the experience supports:",[42,380,381,384,387,390,393],{},[45,382,383],{},"temporal filters such as today, tomorrow, and weekend,",[45,385,386],{},"price filters from free to budget ranges,",[45,388,389],{},"sorting modes such as trending, earliest, and cheapest,",[45,391,392],{},"infinite scrolling,",[45,394,395],{},"and modal-based filter controls that keep the browsing experience clean on mobile.",[19,397,398],{},"This is important because discovery apps fail when they force the same layout on every user. URBEE gives both fast browsing and more structured narrowing.",[228,400,402],{"id":401},"_4-map-based-event-discovery","4) Map-Based Event Discovery",[19,404,405,406,408],{},"One of the strongest usability features is the ",[23,407,251],{}," tab.",[19,410,411],{},"On native mobile devices, I implemented:",[42,413,414,417,420,423,426,429,432],{},[45,415,416],{},"live location permission handling,",[45,418,419],{},"a map centered on the user or a Sao Paulo default region,",[45,421,422],{},"event markers with visible price labels,",[45,424,425],{},"marker selection tied to a collapsible bottom sheet,",[45,427,428],{},"date and radius filters,",[45,430,431],{},"a \"search in this area\" interaction after region movement,",[45,433,434],{},"and a list view of nearby events beneath the map.",[19,436,437],{},"This supports a very practical user behavior:",[42,439,440,443,446],{},[45,441,442],{},"\"show me what is happening near me\",",[45,444,445],{},"\"show me what is happening in this neighborhood tonight\",",[45,447,448],{},"or \"I am going to another part of the city, what is around there?\"",[19,450,451],{},"The usability value here is high because event decisions are often geographic before they are thematic.",[228,453,455],{"id":454},"_5-social-planning-layer","5) Social Planning Layer",[19,457,458],{},"URBEE is not a full social network. It uses social features where they add utility to planning.",[19,460,461],{},"The current structure supports:",[42,463,464,467,470,473,476],{},[45,465,466],{},"personal saved lists,",[45,468,469],{},"feed activity related to events,",[45,471,472],{},"organizer following,",[45,474,475],{},"posts and event updates in the feed,",[45,477,478],{},"and profile-level stats that make saved/planned behavior visible.",[19,480,288,481,483],{},[23,482,256],{}," tab displays user activity tied to events, including:",[42,485,486,489,492,495],{},[45,487,488],{},"who wants to go,",[45,490,491],{},"what event they are referencing,",[45,493,494],{},"a short comment,",[45,496,497],{},"and quick actions such as like, comment intent, and share.",[19,499,500],{},"This is a deliberate product choice. The social layer exists to reduce planning friction and increase confidence through shared discovery, not to overwhelm the product with generic engagement mechanics.",[228,502,504],{"id":503},"_6-event-detail-as-the-conversion-screen","6) Event Detail as the Conversion Screen",[19,506,507],{},"The event detail screen is where browsing turns into intent.",[19,509,510],{},"I built it to consolidate the most decision-critical information:",[42,512,513,516,519,522,525,528,531,534,537],{},[45,514,515],{},"hero media,",[45,517,518],{},"title and tags,",[45,520,521],{},"full date/time presentation,",[45,523,524],{},"venue and neighborhood context,",[45,526,527],{},"ticket or free-entry state,",[45,529,530],{},"attendee count/social proof,",[45,532,533],{},"full description,",[45,535,536],{},"save and share actions,",[45,538,539],{},"and a primary CTA that adapts between \"Confirmar presenca\" and \"Comprar ingresso\".",[19,541,542],{},"This screen is structured to answer the practical questions quickly:",[42,544,545,548,551,554,557,560],{},[45,546,547],{},"What is this?",[45,549,550],{},"When is it?",[45,552,553],{},"Where is it?",[45,555,556],{},"Is it free or paid?",[45,558,559],{},"Are other people interested?",[45,561,562],{},"Do I want to save it, share it, or go now?",[14,564,566],{"id":565},"detailed-usability-and-user-flows","Detailed Usability and User Flows",[228,568,570],{"id":569},"onboarding-and-access","Onboarding and Access",[19,572,573,574,577,578,581],{},"The app includes dedicated ",[23,575,576],{},"login"," and ",[23,579,580],{},"registration"," flows with:",[42,583,584,587,590,593,596],{},[45,585,586],{},"clear credential fields,",[45,588,589],{},"validation for missing data,",[45,591,592],{},"password visibility toggle,",[45,594,595],{},"loading states,",[45,597,598],{},"and guarded navigation so unauthenticated users are redirected before accessing the main tabs.",[19,600,601],{},"This creates a straightforward path from account creation into the product without unnecessary friction.",[228,603,605],{"id":604},"fast-scanning-and-decision-making","Fast Scanning and Decision-Making",[19,607,608],{},"Across the mobile experience, the UI is optimized for rapid scanning:",[42,610,611,614,617,620,623,626,629],{},[45,612,613],{},"strong visual cards,",[45,615,616],{},"short metadata rows,",[45,618,619],{},"persistent use of neighborhood and price,",[45,621,622],{},"compact tag pills,",[45,624,625],{},"loading skeletons,",[45,627,628],{},"empty states,",[45,630,631],{},"and haptic feedback on key interactions.",[19,633,634],{},"The result is a product that helps users make a decision in seconds rather than forcing them to parse dense event listings.",[228,636,638],{"id":637},"filtering-without-overcomplication","Filtering Without Overcomplication",[19,640,641],{},"Filtering is treated as a lightweight decision tool, not as a heavy search form.",[19,643,644],{},"The usability approach is:",[42,646,647,650,653,656,659],{},[45,648,649],{},"show the most common filters first,",[45,651,652],{},"keep the category screen focused on results,",[45,654,655],{},"move advanced filter choices into a bottom sheet/modal,",[45,657,658],{},"make active filters visible,",[45,660,661],{},"and keep sort selection easy to change during browsing.",[19,663,664],{},"This balances speed and control, which is essential for a discovery product.",[228,666,668],{"id":667},"proximity-driven-exploration","Proximity-Driven Exploration",[19,670,671],{},"The map flow was designed around actual mobile behavior:",[42,673,674,677,680,683,686,689],{},[45,675,676],{},"the user grants location,",[45,678,679],{},"sees events plotted spatially,",[45,681,682],{},"adjusts radius,",[45,684,685],{},"pans to another region,",[45,687,688],{},"taps \"search here\",",[45,690,691],{},"and opens the event directly from the sheet or marker context.",[19,693,694],{},"This is more useful than a passive map embed. It becomes a real discovery surface.",[228,696,698],{"id":697},"saved-content-and-return-visits","Saved Content and Return Visits",[19,700,701],{},"Saved events and lists are an important retention mechanic.",[19,703,704],{},"The current product design supports:",[42,706,707,710,713,716],{},[45,708,709],{},"saving from the feed,",[45,711,712],{},"saving from event detail,",[45,714,715],{},"automatic/default saved-list logic in the backend,",[45,717,718],{},"and surfacing list totals in the profile area.",[19,720,721],{},"This makes URBEE useful both for immediate decisions and for slower planning across the week.",[228,723,725],{"id":724},"social-proof-without-noise","Social Proof Without Noise",[19,727,728],{},"The social experience is intentionally restrained.",[19,730,731],{},"Instead of trying to become a generic content feed, URBEE ties activity back to event intent:",[42,733,734,737,740,743,746],{},[45,735,736],{},"people wanting to attend,",[45,738,739],{},"short commentary,",[45,741,742],{},"likes,",[45,744,745],{},"organizer-follow relationships,",[45,747,748],{},"and organizer-related updates.",[19,750,751],{},"This improves relevance and keeps the feed aligned with the product purpose.",[14,753,755],{"id":754},"backend-and-product-architecture","Backend and Product Architecture",[228,757,759],{"id":758},"monorepo-structure","Monorepo Structure",[19,761,762],{},"I organized the codebase into a shared monorepo so product contracts are not duplicated across surfaces.",[19,764,765],{},"The main areas are:",[42,767,768,775,781,787,793,799],{},[45,769,770,774],{},[771,772,773],"code",{},"apps/mobile"," for the Expo app",[45,776,777,780],{},[771,778,779],{},"apps/api"," for the NestJS API",[45,782,783,786],{},[771,784,785],{},"apps/web"," for the web surface foundation",[45,788,789,792],{},[771,790,791],{},"packages/types"," for shared domain contracts",[45,794,795,798],{},[771,796,797],{},"packages/ui"," for shared web UI",[45,800,801,804],{},[771,802,803],{},"packages/config"," for linting, formatting, and TypeScript standards",[19,806,807],{},"This setup improves consistency and makes it easier to evolve the product across mobile and web without drifting models.",[228,809,811],{"id":810},"api-modules","API Modules",[19,813,814],{},"The backend is split into focused modules:",[42,816,817,823,829,835,841,847,853,859],{},[45,818,819,822],{},[23,820,821],{},"identity"," for auth and current-user access",[45,824,825,828],{},[23,826,827],{},"catalog"," for event and organizer retrieval",[45,830,831,834],{},[23,832,833],{},"social"," for lists, follows, and feed assembly",[45,836,837,840],{},[23,838,839],{},"sources"," for source configuration",[45,842,843,846],{},[23,844,845],{},"ingestion"," for pipeline runs and job auditing",[45,848,849,852],{},[23,850,851],{},"review"," for human approval/rejection of low-confidence extraction items",[45,854,855,858],{},[23,856,857],{},"automation"," for secure n8n callbacks",[45,860,861,864],{},[23,862,863],{},"system"," for health checks",[19,866,867],{},"This gives the API a clear product-oriented shape rather than a generic CRUD structure.",[228,869,871],{"id":870},"authenticated-product-flows","Authenticated Product Flows",[19,873,874],{},"The backend supports:",[42,876,877,880,883,886,889,892],{},[45,878,879],{},"register and login endpoints,",[45,881,882],{},"JWT-based authenticated access,",[45,884,885],{},"current-user retrieval,",[45,887,888],{},"authenticated list access,",[45,890,891],{},"authenticated follow actions,",[45,893,894],{},"and authenticated ingestion/review operations.",[19,896,897],{},"That separation matters because URBEE includes both consumer-facing features and operational tooling.",[14,899,901],{"id":900},"event-data-trust-and-ingestion","Event Data, Trust, and Ingestion",[19,903,904,905,30],{},"One of the strongest parts of URBEE as a portfolio project is that it addresses the hard side of event products: ",[23,906,907],{},"data quality",[228,909,911],{"id":910},"source-management","Source Management",[19,913,914],{},"The backend includes source definitions with configuration such as:",[42,916,917,920,923,926,929,932],{},[45,918,919],{},"source name,",[45,921,922],{},"base URL,",[45,924,925],{},"city,",[45,927,928],{},"source type,",[45,930,931],{},"confidence weight,",[45,933,934],{},"and rate limit configuration.",[19,936,937],{},"This is the foundation for treating event ingestion as a managed system rather than a manual spreadsheet problem.",[228,939,941],{"id":940},"ingestion-pipeline-thinking","Ingestion Pipeline Thinking",[19,943,944],{},"The ingestion module supports:",[42,946,947,950,953,956,959,962],{},[45,948,949],{},"triggering ingestion by source or city,",[45,951,952],{},"creating ingestion jobs,",[45,954,955],{},"recording extraction attempts,",[45,957,958],{},"storing execution records,",[45,960,961],{},"tracking confidence levels,",[45,963,964],{},"and requiring review when extraction confidence falls below threshold.",[19,966,967],{},"This is valuable because event platforms are only as useful as their freshness and reliability.",[228,969,971],{"id":970},"human-in-the-loop-review","Human-in-the-Loop Review",[19,973,974],{},"URBEE includes a review queue model for low-confidence extraction results.",[19,976,977],{},"That means the platform is designed for a practical hybrid workflow:",[42,979,980,983,986],{},[45,981,982],{},"automation where confidence is high,",[45,984,985],{},"human approval when confidence is weaker,",[45,987,988],{},"and auditable state transitions for review items.",[19,990,991],{},"This is a more production-aware approach than simply scraping pages and trusting everything blindly.",[228,993,995],{"id":994},"automation-hooks","Automation Hooks",[19,997,998,999,1002],{},"I also built a secure ",[23,1000,1001],{},"n8n callback endpoint"," so external workflows can report job execution status back into the platform.",[19,1004,1005],{},"This enables URBEE to grow into more robust operational patterns such as:",[42,1007,1008,1011,1014,1017],{},[45,1009,1010],{},"scheduled ingestion,",[45,1012,1013],{},"failure handling,",[45,1015,1016],{},"async enrichment,",[45,1018,1019],{},"and multi-step automation flows.",[14,1021,1023],{"id":1022},"data-modeling","Data Modeling",[19,1025,1026],{},"The domain model spans the core product entities needed for this kind of platform:",[42,1028,1029,1032,1035,1038,1041,1044,1047,1050,1052,1055,1058,1061],{},[45,1030,1031],{},"users",[45,1033,1034],{},"organizer profiles",[45,1036,1037],{},"venues",[45,1039,1040],{},"events",[45,1042,1043],{},"lists and list items",[45,1045,1046],{},"follows",[45,1048,1049],{},"posts",[45,1051,839],{},[45,1053,1054],{},"ingestion jobs",[45,1056,1057],{},"extraction attempts",[45,1059,1060],{},"ingestion executions",[45,1062,1063],{},"review queue items",[19,1065,1066],{},"This is important in portfolio terms because it shows product systems thinking, not just screen building.",[14,1068,1070],{"id":1069},"seeded-product-context","Seeded Product Context",[19,1072,1073],{},"To make the system usable in development, I seeded realistic Sao Paulo-flavored entities including:",[42,1075,1076,1088,1103,1106],{},[45,1077,1078,1079,77,1082,81,1085],{},"organizers such as ",[23,1080,1081],{},"Mamba Negra",[23,1083,1084],{},"Gop Tun",[23,1086,1087],{},"Casa Natura",[45,1089,1090,1091,77,1094,77,1097,81,1100],{},"venues such as ",[23,1092,1093],{},"Audio Club",[23,1095,1096],{},"MIS",[23,1098,1099],{},"SESC Pompeia",[23,1101,1102],{},"Parque Ibirapuera",[45,1104,1105],{},"multiple public events with categories, tags, pricing, source URLs, and confidence scores",[45,1107,1108],{},"and posts associated with organizers and members",[19,1110,1111],{},"This helped validate the discovery, social, and ingestion flows against a believable urban event context.",[14,1113,1115],{"id":1114},"design-and-frontend-direction","Design and Frontend Direction",[19,1117,1118],{},"The mobile interface is intentionally not built like a generic utility app.",[19,1120,1121],{},"The design direction focuses on:",[42,1123,1124,1127,1130,1133,1136,1139],{},[45,1125,1126],{},"dark, nightlife-friendly visual treatment,",[45,1128,1129],{},"large media cards,",[45,1131,1132],{},"contrast-forward metadata presentation,",[45,1134,1135],{},"tactile interactions through haptics,",[45,1137,1138],{},"map-first discovery on native devices,",[45,1140,1141],{},"and motion/feedback patterns that make the app feel active and modern.",[19,1143,1144],{},"I treated the experience as a lifestyle/discovery product rather than a plain events directory.",[14,1146,1148],{"id":1147},"engineering-decisions-that-matter","Engineering Decisions That Matter",[228,1150,1152],{"id":1151},"_1-mobile-first-product-architecture","1) Mobile-First Product Architecture",[19,1154,1155],{},"I prioritized the native mobile experience because event discovery, location context, and last-minute planning are naturally mobile behaviors.",[228,1157,1159],{"id":1158},"_2-shared-contracts-across-apps","2) Shared Contracts Across Apps",[19,1161,1162],{},"The monorepo structure and shared package strategy reduce duplication and create a cleaner path for scaling the product across surfaces.",[228,1164,1166],{"id":1165},"_3-operational-backoffice-thinking","3) Operational Backoffice Thinking",[19,1168,1169],{},"The API does more than serve lists of events. It also models ingestion jobs, review states, source management, and automation callbacks. That makes the project much more realistic as a product system.",[228,1171,1173],{"id":1172},"_4-clear-separation-between-discovery-ux-and-operational-infrastructure","4) Clear Separation Between Discovery UX and Operational Infrastructure",[19,1175,1176],{},"Users see a polished discovery product, while the backend is prepared for source orchestration and trust workflows. That separation is a strong engineering choice for long-term maintainability.",[14,1178,1180],{"id":1179},"current-product-state","Current Product State",[19,1182,1183],{},"URBEE today is best described as:",[42,1185,1186,1192,1197],{},[45,1187,47,1188,1191],{},[23,1189,1190],{},"substantially built mobile discovery product",",",[45,1193,47,1194,1191],{},[23,1195,1196],{},"well-structured backend foundation for catalog/social/ingestion workflows",[45,1198,1199,1200,30],{},"and a ",[23,1201,1202],{},"web surface ready for expansion rather than already feature-complete",[19,1204,1205],{},"That distinction matters. I would rather present the product honestly as a serious mobile + API system with a growing web layer than inflate what the web app currently does.",[14,1207,1209],{"id":1208},"why-this-project-matters-in-my-portfolio","Why This Project Matters in My Portfolio",[19,1211,1212],{},"URBEE demonstrates that I can deliver:",[42,1214,1215,1220,1226,1231,1236,1241,1246],{},[45,1216,1217,1219],{},[23,1218,76],{},", not just landing pages",[45,1221,1222,1225],{},[23,1223,1224],{},"mobile app architecture"," with real navigation and state flows",[45,1227,1228],{},[23,1229,1230],{},"location-aware discovery interfaces",[45,1232,1233],{},[23,1234,1235],{},"social utility features tied to product purpose",[45,1237,1238],{},[23,1239,1240],{},"backend systems for operational reliability",[45,1242,1243],{},[23,1244,1245],{},"data modeling for multi-entity platforms",[45,1247,1248],{},[23,1249,1250],{},"API and automation design beyond simple CRUD",[19,1252,1253,1254,30],{},"It shows my ability to work across the full stack of a product where ",[23,1255,1256],{},"content quality, trust, usability, and architecture all matter at the same time",[14,1258,1260],{"id":1259},"freelance-keywords-services","Freelance Keywords / Services",[42,1262,1263,1266,1269,1272,1275,1278,1281,1284,1287,1290,1293],{},[45,1264,1265],{},"Mobile app development with Expo and React Native",[45,1267,1268],{},"Event discovery platform development",[45,1270,1271],{},"Location-based product design",[45,1273,1274],{},"Social planning and saved-content features",[45,1276,1277],{},"NestJS API architecture",[45,1279,1280],{},"Prisma + PostgreSQL backend systems",[45,1282,1283],{},"OpenAPI and API contract design",[45,1285,1286],{},"Ingestion workflow architecture",[45,1288,1289],{},"Human-in-the-loop review systems",[45,1291,1292],{},"Monorepo architecture with shared TypeScript contracts",[45,1294,1295],{},"Product-focused full-stack development",[1297,1298],"hr",{},[19,1300,1301,1302,1305],{},"If you need a ",[23,1303,1304],{},"mobile-first product"," that combines strong UX, real backend structure, and thoughtful domain modeling, URBEE represents the kind of system I build.",{"title":1307,"searchDepth":1308,"depth":1308,"links":1309},"",2,[1310,1311,1312,1313,1314,1323,1331,1336,1342,1343,1344,1345,1351,1352,1353],{"id":16,"depth":1308,"text":17},{"id":88,"depth":1308,"text":89},{"id":124,"depth":1308,"text":125},{"id":190,"depth":1308,"text":191},{"id":225,"depth":1308,"text":226,"children":1315},[1316,1318,1319,1320,1321,1322],{"id":230,"depth":1317,"text":231},3,{"id":284,"depth":1317,"text":285},{"id":334,"depth":1317,"text":335},{"id":401,"depth":1317,"text":402},{"id":454,"depth":1317,"text":455},{"id":503,"depth":1317,"text":504},{"id":565,"depth":1308,"text":566,"children":1324},[1325,1326,1327,1328,1329,1330],{"id":569,"depth":1317,"text":570},{"id":604,"depth":1317,"text":605},{"id":637,"depth":1317,"text":638},{"id":667,"depth":1317,"text":668},{"id":697,"depth":1317,"text":698},{"id":724,"depth":1317,"text":725},{"id":754,"depth":1308,"text":755,"children":1332},[1333,1334,1335],{"id":758,"depth":1317,"text":759},{"id":810,"depth":1317,"text":811},{"id":870,"depth":1317,"text":871},{"id":900,"depth":1308,"text":901,"children":1337},[1338,1339,1340,1341],{"id":910,"depth":1317,"text":911},{"id":940,"depth":1317,"text":941},{"id":970,"depth":1317,"text":971},{"id":994,"depth":1317,"text":995},{"id":1022,"depth":1308,"text":1023},{"id":1069,"depth":1308,"text":1070},{"id":1114,"depth":1308,"text":1115},{"id":1147,"depth":1308,"text":1148,"children":1346},[1347,1348,1349,1350],{"id":1151,"depth":1317,"text":1152},{"id":1158,"depth":1317,"text":1159},{"id":1165,"depth":1317,"text":1166},{"id":1172,"depth":1317,"text":1173},{"id":1179,"depth":1308,"text":1180},{"id":1208,"depth":1308,"text":1209},{"id":1259,"depth":1308,"text":1260},"A mobile-first event discovery platform with social planning, map-based exploration, and ingestion-oriented backend architecture.","md",{"category":1357,"image":1358,"stack":1359,"tags":1360,"date":1371,"featured":1372},"Mobile","/images/works/urbee.png","Expo, React Native, NestJS, Fastify, Prisma, PostgreSQL, Turborepo",[1361,1362,1363,1364,1365,1366,1367,1368,1369,1370],"Expo","React Native","NestJS","Fastify","Prisma","PostgreSQL","Product Design","Geolocation","Event Discovery","Monorepo","2026-03-09",true,"/portfolio/urbee",{"title":5,"description":1354},"portfolio/urbee","0oS-UVEOu5-gAN9G_VsPczFJzttc9cGhAc1qj_a7ZYM","default",[1361,1362,1363,1364,1365,1366,1367,1368,1369,1370],1773091123858]