ERNESTO—SOFTWARE.
EN ES
01.06 Engagements Hackathon · city guide Storyblok Hackathon 2025
← Engagements

Brewbook

Full stack city guide built with Next.js 15, Storyblok CMS and Algolia search. Search with synonyms, typo tolerance and composite filtering. Service oriented backend with dependency injection.

Brewbook
Fig. 01. Brewbook Next.js 15 · React 19 · TypeScript · Storyblok · Algolia · Leaflet

The record

Line of work
Hackathon · city guide
Location
Storyblok Hackathon 2025
Built with
Next.js 15 · React 19 · TypeScript · Storyblok · Algolia · Leaflet
Outcome
Hackathon build
Status
Shipped

I The build

Next.js 15 App Router with Storyblok visual editor integration
Fig. 02.
01

Next.js 15 App Router with Storyblok visual editor integration

Headless CMS architecture with Storyblok powering content and Algolia handling search. Components are mapped to Storyblok blocks (hero, cafe, event, card_grid) enabling visual editing while maintaining type safe rendering in React.

React InstantSearch with real time results
Fig. 03.
02

React InstantSearch with real time results

Search powered by Algolia with configured synonyms (quiet↔calm↔peaceful, wifi↔internet↔wireless) and typo tolerance. React InstantSearch provides instant filtering with infinite scroll pagination loading 6 hits per page.

Faceted filtering with composite attributes
Fig. 04.
03

Faceted filtering with composite attributes

Advanced faceted search across noise_level, price_range, wifi, power_outlets, and more. The "Work-Friendly" filter demonstrates composite filtering: combining WiFi and power outlet availability into a single smart toggle.

Dynamic routes with Storyblok rich text rendering
Fig. 05.
04

Dynamic routes with Storyblok rich text rendering

Detail pages use Next.js dynamic routing (/cafe/[slug]) with server side Storyblok fetches. Rich text content is extracted from nested Storyblok structures and rendered with the official rich text renderer.

Geolocation with Leaflet maps
Fig. 06.
05

Geolocation with Leaflet maps

Each venue includes _geoloc data synced to Algolia. React Leaflet renders interactive maps on detail pages. The data model supports both cafes and events with shared search infrastructure but type specific rendering.

Service oriented data pipeline
Fig. 07.
06

Service oriented data pipeline

Backend follows SOLID principles with StoryblokService, AlgoliaService, RecordNormalizer, and SeedingOrchestrator. Python seeds Storyblok, Node.js syncs to Algolia with idempotent upserts, safe to re-run without duplicates.

Start a conversation

Happy to walk through this one screen by screen, in the order it got built.