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

Saskell Creek Public Schools: a self-hosted CMS for school districts — an open-source .NET public school website

A public school district website for a fictional PreK–12 district: sixteen schools drawn as feeder lines, today's bells and status as a departure board, lunch menus as trays, a calendar labeled in words, board meetings and policies, a staff directory, and members-only family and staff areas. Built on Raytha, a self-hosted, open-source .NET CMS for school districts, by an AI agent with the CLI in under an hour.

Build time
Under an hour
Built with
Raytha 2.0.1 and the raytha CLI 0.1.1
Industry
Education
Rebuild
One script, from GitHub
Saskell Creek Public Schools: a self-hosted CMS for school districts — an open-source .NET public school website
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 / 10Home: today's status strip, a today card with bell tallies and lunch, and the start of the feeder map
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 a local public school district website — the site families check before 7 am to see whether school is open, the place the board posts its agendas and policies, and the directory a new family uses to find the front office. The same build works for a district's own communications office, or for an agency or freelancer that builds sites for school districts.

If you are looking for a self-hosted CMS for school districts, or an open-source .NET CMS for public schools, this is the kind of site that fits: schools, calendars, lunch menus, board meetings and policies as structured content, server-rendered pages, and members-only family and staff areas built on Raytha's own user accounts and groups. Built on a fresh Raytha instance, with no client-side app in the layout.

Saskell Creek Public Schools is fictional. The district, the town of Saskell Creek, its sixteen schools, staff, board members, students, bus routes and figures are invented and labeled as such, and phone numbers use the 555 range. There are no payment, registration or enrollment forms; family and staff accounts exist only for the demo.

A district drawn as feeder lines

Most district sites open with a photo carousel and a row of quick links. This one is organized the way families actually move through a district: from one school to the next.

  • A feeder map on the home page. Each high school zone is a colored line, like a transit map: elementary stops, then a middle school, then the high school, with the early learning center feeding every line and the career center shared by all three high schools. Every stop is a school record with a line and a stop number, so the map is drawn on the server from content and redraws itself when a school is added.
  • Today's bells as a departure board. Every school's first bell, dismissal and status for the day (on schedule, delayed start, early release, closed), written in words as well as color. A principal changes one field, and the board, the map marker and the school page all update. A status strip on every page carries the day's pinned notice.
  • School pages with a "you are here" strip. Each school shows its stop on the line, the next stop, bells, principal, programs, the staff at that school, and the calendar entries and news that mention it.
  • Lunch as trays. The week's menu is laid out as lunch trays: main, vegetarian option, sides and the major allergens written out. Today's tray is highlighted.
  • A calendar that reads without color. Month grids for no-school days, early releases, conferences, concerts, games and testing, each labeled in words, plus the same dates as a plain list for phones and screen readers.
  • The board in the open. Meetings with agendas, votes and draft or approved minutes; a policy manual by series, where policies under review show their reading and link to the meeting that will take them up.
  • A staff directory by school, an accessibility statement, a "new families" page that explains in-person enrollment, and site search.

Design: the feeder line

The visual language is a transit map crossed with a school hallway: warm paper, ink navy, school-bus yellow for anything about today, and one color per line (teal, red, violet). The main navigation is drawn as a line with stops. Text is set in Atkinson Hyperlegible Next, a typeface designed for readers with low vision, with Atkinson Hyperlegible Mono for bell times and policy numbers. There are no wide display fonts. School and news images are generated geometric art, so no real building, student or staff member is pictured.

Why a school district looks at a self-hosted CMS

  • Families and staff without a second portal. Raytha has public user accounts and user groups. The family hub, the staff room and families-only or staff-only documents check CurrentUser.UserGroups in the template on the server, so a locked page is never sent to a browser that should not see it.
  • No per-seat pricing. Every principal, school secretary, coach and teacher who posts can have an editor account, and families can have as many sign-ins as there are households. Raytha has no seat licensing, so a district does not ration logins across sixteen buildings.
  • You own the code and the content model. Raytha is open source. Schools, calendars, menus, meetings and policies are content types you define; the templates and content are files you can keep in your own repository, hand to the next vendor, or rebuild on a new server without asking anyone.
  • Your infrastructure, if your IT policy needs it. Many district IT teams run Windows and .NET, keep student-adjacent systems on their own network, or have state rules about where data lives. Raytha is ASP.NET Core with PostgreSQL, so it can run on premises or in a private cloud next to what the district already operates. Single sign-on, role-based admin permissions and audit logs are built in. You can also deploy it on Railway.
  • Accessibility is in your templates, not behind a vendor's theme. In the US, the Justice Department's ADA Title II rule adopts WCAG 2.1 AA for state and local government websites, which includes public school districts; after an April 2026 extension, compliance dates are April 26, 2027 for entities serving 50,000 people or more and April 26, 2028 for smaller ones. Because every page here is server-rendered HTML from templates you control, headings, focus styles, contrast and status text are yours to set and test. This example uses a skip link, real headings, visible focus outlines, status in words and not color alone, and schedules, menus, agendas and policies as web pages rather than scanned PDFs.
  • Public records as pages. Board agendas, votes, minutes and policies are structured content with their own URLs, searchable on the site and linked to each other, instead of a folder of uploads.
  • One build, many districts. For an agency or freelancer that builds school sites, the kit is the product: the same content model and theme can be rebuilt for the next district with its own schools, lines and colors.

Raytha fits school districts that want to own their stack: the code is open source, the content model is yours, and the site can run on servers the district controls. If you would rather not run it yourself, Raytha can be fully hosted and managed for you under contract. Where another platform may suit you better is if you need a large plugin marketplace, or an all-in-one marketing suite with CRM and marketing automation built in. For fair comparisons with platforms districts and .NET teams often evaluate, see Raytha vs WordPress, Raytha vs DNN, Raytha vs Kentico and Raytha vs Umbraco.

How the members-only areas work

  • Two user groups: families and staff. A staff account is also treated as a family account (many staff are parents in the district); admins see everything.
  • Each resource has an audience field (everyone, families, staff). The detail template reads it and the signed-in user's groups and renders either the body or a lock panel with a sign-in link. The resource list shows every document with its audience, so the public can see what exists without reading it.
  • The family hub at /families is a site page with its own template: signed out, it explains what is behind sign-in; signed in, it shows a student pass (story data) with the school's live bells and status pulled from the school record, the bus route and stop times, this week's lunch trays, the dates that affect the family, a conference time, and the documents shared with families.
  • The staff room at /staff-room shows the latest staff bulletin, training days from the calendar, staff procedures and quick numbers, only for staff accounts.
  • Sign-in uses Raytha's built-in login page, restyled to match. There is no registration form: in the story, the school office creates a family account at enrollment.

What is in the kit

Eight content types (schools, news, calendar events, staff, board meetings, board policies, lunch menus, resources), two user groups, site pages for About, Accessibility, New families, Search, the family hub and the staff room, menus, and generated school and news art — all rebuildable with one command from the kit in the examples repository. Route check: 120 routes checked, 0 failed.

Run it yourself

Run this on your own Raytha

Raytha is free and open source (MIT). Deploy your own copy on Railway, with PostgreSQL included, then load this site into it from the rebuild kit.

  1. Deploy RaythaThe Railway template sets up Raytha, PostgreSQL and a volume for uploads. Open the new site and create your administrator.
  2. Create an API keyIn the admin: People, Admins, open your account, then Create API key.
  3. Import the kitInstall the Raytha CLI, set RAYTHA_URL and RAYTHA_API_KEY, and run the kit's build.sh on the fresh site.

Prefer your own server? Raytha also runs with Docker.

Share Post LinkedIn

Build yours on Raytha

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