Platform CLI Use cases
Learn
Developer docs User guide Quickstart CLI and AI agents Blog
Company
Services About Contact Links Get started
Publishing and media

The Harbor Ledger: a local news site with sections, bylines, a breaking banner, live updates and feeds

The website for a fictional local newsroom: a newspaper-style front page, section fronts, reporter pages, a breaking news banner switched on by a checkbox, timestamped live updates, a most-read list and RSS and JSON feeds, built on Raytha by an AI agent with the CLI in about an hour.

Build time
About an hour
Built with
Raytha 2.0.1 and the raytha CLI 0.1.1
Industry
Publishing and media
Rebuild
One script, from GitHub
The Harbor Ledger: a local news site with sections, bylines, a breaking banner, live updates and feeds
Walkthrough

See it in action

A short, silent tour of the finished site, recorded from the real pages.

Silent walkthrough, 1080pOpen the MP4
The site

Take the tour

10 screens from the finished site, on desktop and on a phone. Use the arrow keys, swipe, or open any screen full size.

01 / 10The front page: the breaking banner, the latest headlines, the top story with its newest live updates
The write-up

For each Raytha use case we take a realistic brief, hand it to an AI agent with the raytha CLI, and publish what comes out: the site, the files behind it, and a kit you can use to rebuild it yourself. This one is the website for a local newsroom: a front page, section fronts, reporter pages, a breaking news banner, live updates on a developing story, a most-read list and RSS and JSON feeds.

The agent built it on a fresh Raytha 2.0.1 instance. Nobody opened the admin. Every template, content type, item, page, menu and function went in through the CLI, from files in a directory.

What was built

The Harbor Ledger is a fictional nonprofit newsroom covering Port Merrow, a coastal city on the night a nor'easter floods the waterfront. The site has:

  • A front page laid out like a newspaper: a column of the latest headlines, the top story with its three newest live updates, two secondary stories, rows for City Hall, Harbor & Climate and Business, a dark most-read band, columns for Schools, Sports and Arts & Life, an opinion row and a box with the feeds.
  • A red breaking banner across the top of every page. It appears when an editor ticks "Breaking" on any story, links to it, and shows a pulsing "Live" marker when the story has live updates.
  • Article pages with the section, story type, headline, summary, a byline with the reporter's role, the date and time, minutes to read, a lead image with a caption, a dateline, a correction note when there is one, an author box, most read and more from the same section.
  • Live updates on the storm story: ten timestamped posts, newest first, marked as key developments, official statements or corrections, each with its source. A "Key developments" button hides everything else. Corrections are posted as their own update instead of silently editing the earlier one.
  • Section fronts for seven sections, and a latest news page that filters by section and story type together (/news?section=harbor-climate&type=news), grouped by day.
  • A page for every reporter, with their beat, bio, email and stories, and a masthead page listing the newsroom.
  • A most-read page ranking the top ten stories with bars, and an honest note about where the numbers come from.
  • An RSS feed and a JSON Feed of the latest stories, each with an optional ?section= filter.
  • An About page with the newsroom's standards and staff.

The design is a modern broadsheet: newsprint background, ink black, one signal red, thin column rules and a double rule under the masthead. Headlines and story text are set in Source Serif 4 and the interface in Inter. The 20 story illustrations are generated as SVG, so every image is license-free. On a 390px phone the section bar scrolls sideways, the front page becomes one column and the live updates stack.

How the breaking banner, live updates and most-read work

  1. Each article has a checkbox for "Breaking", another for "Has live updates" and one for "Top story". The base layout asks for get_content_items(ContentType="articles", Filter="breaking eq 'true'") on every page, so ticking the box puts the banner on the whole site and unticking it takes it down. There is nothing to deploy.
  2. A live update is its own content type, with a relationship field to its story, a time stamp, an order number and a dropdown for its type. The article template pulls the updates for that story, newest first, and the front page shows the latest three under the top story. An editor posts an update by adding one content item.
  3. Most read is a list view sorted by a number field, "Reads in the last 7 days". Raytha does not count page views, so in this demo the numbers are seeded by hand. A real newsroom would have a nightly job copy them from its analytics into the field through the Raytha API. The page says so.
  4. The feeds are two Raytha Functions with HTTP triggers at /feeds/latest.rss and /feeds/latest.json. They read the newest stories with the API, sort them by date and time stamp, and filter by section when the URL asks for one.

Features, and the Raytha features behind them

Feature How it is built
Sections, staff, articles and live updates Four content types from one schema document. Articles use relationship fields to their section and author, a dropdown for story type, checkboxes for breaking, live and top story, a number field for reads, a date, an attachment for the lead image and rich text for the story. Live updates relate to their article.
45 seed items Content import from JSON Lines. Articles point at their section and author by name, and the illustrations are uploaded during the import.
Breaking banner The base layout queries for a story with the breaking checkbox ticked, on every page.
Latest news with filters A list view with a Liquid template that combines ?section= and ?type=.
Most read A second list view on the same content type, sorted by the reads field.
Article, section, reporter and live update pages Detail templates per content type that pull related items with get_content_items.
RSS and JSON Feed Two Functions (JavaScript) with HTTP triggers at their own routes.
Front page and About Site pages built from 10 custom widget templates (lead, section row, section columns, most read, opinion, feeds, text, page heading, standards, staff).
Navigation Two menus: the section bar and a footer menu. The footer also lists the sections straight from the content.

The brief

This is the brief, as given to the agent.

Build a website for a local news publication on a fresh Raytha instance with the raytha CLI. No clicking around the admin.

Look and feel

  • Visually impressive, with a design of its own. No wide display fonts.
  • Responsive. It has to look good on a phone as well as a desktop.

Content and pages

  • A front page with the top story, the latest headlines and section rows.
  • Sections, each with its own front page, and a way to filter stories by section and story type.
  • Bylines that link to a page for each reporter.
  • A breaking news banner the newsroom can switch on for any story.
  • Live updates on a developing story.
  • A most-read list.
  • RSS and JSON feeds.

Done means

  • raytha check passes with no broken routes.
  • Screenshots of the result on desktop and mobile, and a walkthrough video.
  • A kit in the examples repository that rebuilds the site on a fresh install.

How long it took

About an hour of agent time, from an empty install to raytha check passing on every route, including the visual design, the generated illustrations, the live updates, the feeds and writing all 45 items.

Rebuild it yourself

The theme, schema, seed content, illustration generator, functions, page definitions and menus are in the raytha-examples repository, with a build.sh that rebuilds the whole site into any Raytha 2.x instance. Point it at your site with RAYTHA_URL and RAYTHA_API_KEY and run it.

Share Post LinkedIn

Build yours on Raytha

Free, open source and ready to deploy in minutes. Bring a brief and an AI agent.