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

Kestrel Valley Credit Union: a self-hosted CMS for credit unions and community banks, on open-source .NET

A credit union website for a fictional member-owned credit union: rates with an effective date, accounts and loans, branches and ATMs on a map, financial education, a security center with fraud alerts, the board and annual reports, and a members-only area for annual meeting documents, built on Raytha, an open-source .NET CMS for credit unions and community banks, 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
Financial services
Rebuild
One script, from GitHub
Kestrel Valley Credit Union: a self-hosted CMS for credit unions and community banks, on open-source .NET
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 home page: a fictional scam alert banner, today's rates and the tasks members come to do
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 credit union website: rates with an effective date, accounts and loans, branches and ATMs, financial education, a security center with fraud alerts, the board and annual reports, and a members-only area for annual meeting documents.

If you are looking for a self-hosted CMS for credit unions or a CMS for community banks that runs on .NET, this is what a credit union's public website looks like on Raytha. 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.

Kestrel Valley Credit Union is fictional. The rates, people, branches and documents are invented, and the site says so on every page.

Why credit unions and community banks look for a self-hosted CMS

A financial institution's public website is marketing, but it is also a place where rates, disclosures and fraud warnings have to be right, and where every outside vendor gets reviewed. The questions tend to be the same:

  • Vendor risk and exam reviews. Every hosted CMS is another third party in your vendor management program, with its own due diligence, contract review and SOC report requests. Raytha is a .NET 10 application with PostgreSQL, shipped as a Docker image, so it can run on your own servers, in your own cloud account or with a hosting partner you already review. You can point to where it runs, who has access and how it is backed up.
  • You own the code. Raytha is MIT-licensed. The templates, content types and content in this example are plain files you can keep in your own repository, so the site does not depend on one vendor staying in business or keeping its prices.
  • It fits a .NET shop. Many banks and credit unions run Windows, SQL Server and .NET line-of-business applications. Raytha is ASP.NET Core, so the team that patches your other .NET applications can host, review and extend it with tools they already know.
  • Members-only areas without a second system. Raytha has public user accounts, user groups and per-group permissions, so annual meeting materials, minutes and board election packets can sit behind a sign-in. That sign-in is for the website only. It is not online banking, which stays with your core or digital banking provider.
  • No per-seat pricing. There is no license fee per editor, per branch or per page view, so marketing, compliance and branch staff can all have accounts.
  • Accessibility you can fix yourself. Financial institutions have been a frequent target of website accessibility demand letters and lawsuits under the ADA. Every page here is a Liquid template you control, with a skip link, landmarks, one heading per page, visible keyboard focus, labelled controls, real tables for rates and alt text. A template you can edit makes that work faster, but conformance still has to be tested on your own site.
  • Staff sign-in. Raytha supports SAML and JWT single sign-on, so the people who edit the site can use the identity provider you already have.

Raytha is a small open-source project, and it is not the right answer for every institution. If you want a vendor that hosts, supports and indemnifies the platform, a commercial CMS may fit better. For fair comparisons with the platforms banks and credit unions often run, see Raytha vs Kentico, Raytha vs DNN (DotNetNuke) and Raytha vs WordPress.

What was built

Kestrel Valley Credit Union is the website of a fictional member-owned credit union founded in 1958, with 48,600 members, four branches and three ATMs in a valley around the town of Harlow. The site has:

  • A home page with today's rates, the tasks members come to do, featured accounts and loans, what member ownership means, learning and security articles, a map of branches, news and the annual meeting.
  • A rates page with dividend and loan rates in five tables (savings and checking, certificates, auto, home, personal loans and cards), each with its term, minimum, APY or APR, "as low as" where it applies and the effective date. Every rate is marked fictional.
  • Eleven account and loan pages, filterable by checking, savings, certificates, auto, home, personal and business, each with what it is for, the key terms, its current rates pulled from the rates table and frequently asked questions. To open an account or apply, members are pointed to a branch, a phone number or online banking, so there are no application or payment forms on the site.
  • Branches and ATMs on a drawn map of the valley, with addresses, lobby and drive-thru hours, services such as notary and safe deposit boxes, and a page for each location.
  • A financial education library of articles on budgeting, building credit, buying a first home, certificate ladders, teaching kids about money and spotting scams.
  • A security center with current fraud alerts by level and an RSS feed, plus a scam warning banner across the top of every page while an alert is active.
  • An about section with how to become a member, the volunteer board of directors and supervisory committee, news, and reports and documents such as the annual report and fee schedule.
  • A member area behind a Raytha sign-in, with the annual meeting notice, the minutes, the board nomination packet and the audit letter. Signed out, those documents show a lock and a sign-in prompt instead of the file.
  • A loan payment calculator that runs in the browser, an accessibility statement, disclosures, a contact page and a search page across products, rates, locations, articles, news and documents.

The design is calm and trustworthy: a deep teal header and hero with a mountain line, a warm off-white page, white cards, and a copper accent kept for the main buttons. Headings are set in Source Serif 4 and everything else in Figtree. Rates use tabular figures so the columns line up. The logo, illustrations, portraits and PDFs are generated by a script, so every image and document is license-free. On a 390px phone the navigation becomes a menu button, the rate board and tasks stack and the rate tables stay readable.

How the rates, alerts and member area work

  1. Each rate is its own content item with a table, term, minimum, rate, APY or APR, an "as low as" checkbox, an effective date and a relationship field to its product. The rates page, the home page rate board and each product page all read the same items with get_content_items, so a rate change is one edit and shows up everywhere.
  2. A fraud alert has a level, a summary and an "Active" checkbox. The base layout asks for active alerts on every page, so ticking the box puts the warning banner on the whole site and unticking it takes it down.
  3. The member area uses a Raytha user group. The page and the members-only document template check the signed-in user's groups, so members see the documents and everyone else sees a sign-in prompt.
  4. Two Raytha Functions with HTTP triggers publish /feeds/rates.json, the rates as JSON for lobby screens or a partner site, and /feeds/security.rss, the fraud alerts as RSS. Both take an optional filter, ?table= and ?level=.

Features, and the Raytha features behind them

Feature How it is built
Branches, products, rates, articles, news, alerts, board members and documents Eight content types from one schema document, with dropdowns for product type, rate table, rate type, article topic, alert level and document kind, checkboxes for featured products, active alerts and members-only documents, numbers for rates and map positions, dates, attachments for portraits, images and PDFs, a relationship field from rates to products, and rich text for bodies.
70 seed items Content import from JSON Lines. Rates point at their product by name, and the images and PDFs are uploaded during the import.
Site-wide scam warning The base layout queries for alerts with the active checkbox ticked, on every page.
Rate tables, products by type, articles by topic, news by category, alerts, the board and documents List views with Liquid templates. Products, articles and news read ?category= and ?topic= filters, and the rates list groups items into tables.
Product, branch, article, alert, board member, news and document pages Detail templates per content type that pull related items with get_content_items.
Member area and members-only documents A user group and templates that check CurrentUser.UserGroups.
Rates feed and security alerts feed Two Functions (JavaScript) with HTTP triggers at their own routes, returning JSON and RSS.
Home, about, contact, accessibility, disclosures, loan calculator and search Site pages built from 10 custom widget templates (hero with rate board, top tasks, page heading, member ownership, numbers, text, steps, questions and answers, contacts, loan calculator).
Navigation Two menus: the main navigation and the footer.

The brief

This is the brief, as given to the agent.

Build the public website of a fictional credit union on a fresh Raytha instance with the raytha CLI. No clicking around the admin.

Look and feel

  • Calm, trustworthy and local. Plain language, high contrast, big tap targets. No wide display fonts.
  • Responsive. It has to look good on a phone as well as a desktop.
  • Accessible markup: landmarks, a skip link, visible focus, alt text, labelled controls, real tables for rates.

Content and pages

  • A home page with today's rates, top tasks, featured products, branches, learning, security and news.
  • Rates with an effective date, accounts and loans, branches and ATMs, financial education, a security center with fraud alerts, the board, reports and documents, an accessibility statement, disclosures and contact.
  • A members-only area for annual meeting materials and board elections.
  • No application, payment or registration forms, and no fake online banking login. Opening an account points to a branch or a phone number, and online banking links out.
  • Make it obvious everywhere that the institution, its rates and its people are fictional.

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

Under an hour of agent time, from an empty install to raytha check passing on all 93 routes, including the visual design, the generated illustrations and documents, the member area, the two feeds and writing all 70 items.

Rebuild it yourself

The theme, schema, seed content, image and document generator, page definitions, menus and feed functions are in the raytha-examples repository, with a build.sh that rebuilds the whole site into any Raytha 2.x instance. Run it against a Raytha install on your own servers, or deploy Raytha on Railway from the template to try it first, then replace Kestrel Valley with your own institution, rates and disclosures.

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.