Back to Cases
Digital 2026 Featured

Publitik

Publitik

Forty-eight publishing sources across nineteen countries, read daily by people who don't have all day. The site had to prove that on the first screen — and prove it on its own.

Services

Digital Product Interface Design Web Development SEO and Content
Publitik
Results

48

Sources monitored

19

Countries covered

2

Languages

90s

Push to live

Four hours or four seconds

Anyone who works with books knows the routine: open twenty tabs, skim outlets in three countries, check the charts, look at what BookTok is pushing, read the newsletter that landed this morning.

That takes four hours a week from someone who should be publishing books.

Publitik exists to turn those four hours into four seconds. The question was different: how does a website prove that in under ten seconds?

By promising less. By showing more.

The challenge

Market intelligence products carry a built-in credibility problem: everyone promises the same thing. Unified dashboard, real time, actionable insights. The words stopped meaning anything.

Whoever lands on the site doesn’t want to read about the product. They want to know whether it has what they need — whether it covers the sources they follow, whether it reaches the market they care about, whether it’s current right now or stopped updating in March.

And there was a constraint of our own: this audience is both inside and outside Brazil. The site had to work in two languages without becoming two projects.

The product introduces itself

The central decision: show instead of describe.

The first screen carries a live badge with the volume classified today, and right below it the real feed from the last twenty-four hours — headline, source, country, relevance score, how long ago it came in.

It isn’t an interface illustration. It’s the product running.

A number that changes by itself is worth more than any adjective. It proves someone is awake on the other side.

Below that, the counters that answer the coverage question before it’s asked: how many sources, how many countries, how many books in the charts, when the last ingestion ran. If the answer is “forty-eight minutes ago”, the conversation about freshness is over.

A night environment, not a trend

The interface is dark because the context asks for it, not because it’s fashionable.

This is a reading surface — someone scanning dozens of items in a row, probably early, probably before the first coffee. A dark surface reduces fatigue across that scan, and lets signal colour do its work: amber for what matters, state tones for what’s rising or falling.

A single typeface in two voices — text and monospace — because data needs predictable alignment to be compared by eye.

The blog that writes itself

The part visitors don’t see: the blog receives its weekly column without anyone opening the repository.

The analysis system generates the draft, a person approves it in a review screen, and that approval publishes straight to the repository through an API. The push triggers the build, the site rebuilds, and the newsletter goes out minutes later.

From approval to live: roughly ninety seconds.

And one deliberate lock: the list of allowed topics is closed in code. A topic outside the list breaks the build. That’s strict on purpose — better for the error to appear at publish time than for the blog’s taxonomy to rot quietly over a year.

What we built

A static, bilingual institutional site, with a blog fed by automation, cookieless navigation analytics and continuous publishing from our own infrastructure.

No third-party platform in the way, no CMS subscription, no dependency that changes its pricing one day.

The publishing market at a snap of your fingers. The site had to be just as fast.


Notes for the nerds

Stack

  • Astro 6, fully static — the build outputs HTML, with no server-side JavaScript
  • Tailwind CSS 4 via the Vite plugin
  • MDX for posts, with schema validation at build time
  • Sitemap generated automatically
  • Geist and Geist Mono, loaded with display=optional
  • Ambient particle background, lazily loaded, with zero blocking time

Infrastructure and deploy

  • Repository on our own self-hosted Git server (Forgejo)
  • Forgejo’s native CI → Docker image → container behind Traefik on our own VPS
  • From push to live: 30 to 90 seconds
  • No dependency on a proprietary deployment platform

Automated publishing

  • The weekly column is generated by the analysis system, reviewed by a person and published through Forgejo’s content API
  • Publishing triggers the build, which triggers the newsletter
  • Required frontmatter validated at build time (title, description, date, author, topics, reading time)
  • Topic list closed in code: a topic outside the whitelist breaks the build on purpose

Privacy and measurement

  • Self-hosted navigation analytics, cookieless, with no personal data collected
  • No third-party trackers on the site
  • Data protection compliance by architecture, not by banner

Internationalisation

  • Portuguese and English in the same codebase
  • Persistent language switcher
  • Blog content and institutional pages versioned together
Gallery

Project Details

Available for new projects

How would you like your story to be told?

Tell us what you have in mind. We listen before proposing anything.

Talk to us