How the site's records fit together

A record map for staff. Printed November 8, 2026.

Back to Admin

Layer 1

Records — The database

Each box on this page is one record type. Records are created and changed in the Admin screen, never in the page code.

Layer 2

Shared parts — Reusable code

Pieces like FriendlyPrograms, ServicesAvailable and HelpCardGrid read records and lay them out the same way on every page that uses them.

Layer 3

Pages — What visitors see

Each page pulls the records it needs and shows them through the shared parts. Pages hold no content of their own.

→ means the record stores the other record's id. The small amber note in each box is the Admin screen where you edit it.

Service: the words people mix up

Service directory

The page at /services. It lists every Service record as a card, and lets a visitor filter that list by category.

Service details

One service's own page at /services/<slug>. It reads one Service record, plus that record's sections and nutrition notes.

Service category

Not a record of its own: one of ten fixed words stored on the Service record. Change it and the card moves in the directory filter.

Serviceone record = one service pageService Sectionservice_idNutrition Program Detailsservice_idService Area Linkservice_idTag Assignmentterm_id + target_idExtra blocks of texton that one service pageMeal and cost notesfor the nutrition programsThe same service listedon a community pageWords attached to it:chips and site searchTermthe word itself

Solid boxes are records; a solid arrow means the child stores the parent's id. Dashed boxes are only descriptions of where the child shows up. The category is a word on the Service record, not a separate record.

Services (the backbone)

One Service record is one service page. Everything else here hangs off it.

Service

Services

One service page at /services/<slug>: card text, hero photo, who it is for, cost, provider, next steps.

  • →Media (image_url holds an uploaded photo link)
  • →A detail page (detail_url, e.g. /nutrition-services)
  • →Service categories (the shared category list)

ServiceSection

Services

Extra blocks of text further down a service page, in the order set here.

  • →Service (service_id)

NutritionProgramDetails

Nutrition Programs

The programs listed on /nutrition-services, with their meal and cost notes.

  • →Service (service_id)

ServiceAreaLink

Service Area Links

Puts a service on a community page, with optional local wording.

  • →Service (service_id)
  • →A page address (area_slug)

PacketUsageCounter

Service Packets

One row per day per action: packets viewed, printed or emailed. Totals only, no visitor information.

  • →Service (service_id, only when a service is added)

Finding help

How the /i-need-help page is assembled.

HelpCard

I Need Help Cards

One card on /i-need-help. It links to a whole page or to one service category.

  • →Another HelpCard (parent_id, when it is a small link inside that card)
  • →A page address (link_to)
  • →Service categories (link_query)
  • →Media (image_url)

HotTopic

Timely Topics

The short timely-topic line shown on a help card.

  • →HelpCard (parent_card_id)
  • →A page address (link_url)

HelpCategory

I Need Help Cards

The heading blocks the help cards are grouped under.

  • →Media (image_url)
  • →HelpCategoryLink rows (they point here)

HelpCategoryLink

I Need Help Cards

One link listed inside a help category block.

  • →HelpCategory (category_id)
  • →A page address (link_to)

Words & search

The vocabulary behind site search, chips and the tag picker.

Term

Tags & Search

One approved word or phrase, plus the synonyms and misspellings that should find it.

  • →Term (broader_term_id, one level up)
  • →Term (replaced_by_id, when retired)

TagAssignment

Tags & Search

The join row: one term attached to one service or page.

  • →Term (term_id)
  • →Service or SitePage (target_type + target_id)

TermSuggestion

Tags & Search

A proposed word waiting for a decision. Approving it creates a Term.

  • →Term (created on approval)
  • →Service or SitePage (target_id)

SitePage

The list of site pages that search, tagging and forms can point at.

SearchMiss

Tags & Search

Searches that returned nothing, so you can see which word to add next.

Forms & messages

Forms are built from a record, so staff can change wording without code.

FormConfig

Contact Forms

One form: fields, wording, who receives it, and the pages it appears on automatically.

  • →Page addresses (page_paths)
  • →Header and footer buttons (show_in_header / show_in_footer)

SubmissionLog

Contact Forms

A log line for each form sent, used to count and follow up.

  • →FormConfig (form_slug)

InterestSignup

Upcoming Classes

Someone who asked to hear about a class topic.

  • →Topic (topic_slug)

PorchSurveyResponse

The answers sent through The Front Porch survey.

Service packet

The visitor's own list is never saved in the database: it lives in their browser, expires on its own, and clears sooner if it holds a sensitive service.

PacketSettings

Service Packets

One set of choices for the printable packet: on or off, how many services, cover note, print wording.

Events & classes

Calendars are built for you by the monthly workflow from the Tockify feed.

MonthlyCalendar

Built automatically

One month of events saved for the printable calendar download.

  • →Tockify event feed (copied in)

FeedCache

Built automatically

A saved copy of the events feed so pages load quickly.

Topic

Upcoming Classes

A class or community topic: page wording, matching words, contact details.

  • →Media (image_url)

People & voices

Photos live in Media; the other records keep the link.

TeamMember

Team Members

Staff cards on /about.

  • →Media (photo_url)

BoardMember

Board Members

Board list on /board.

  • →Media (photo_url)

Testimonial

Testimonials

Quotes shown in site sections.

  • →Media (photo_url)

CaregiverResource

Caregiver Resources

Cards on /caregivers, including the small links inside each one.

  • →Media (image)
  • →Page addresses (link_url and the links inside)

Media

Media Library

Every uploaded photo and file, with alt text and search words. Nothing on this sheet stores a photo itself, only a link to one here.

  • →Used by the photo fields on Service, HelpCard, HelpCategory, Topic, TeamMember, BoardMember, Testimonial and CaregiverResource

Site-wide settings

Single records that change something on every page.

SiteSettings

Site Settings

Key/value switches that turn shared site features on or off.

Announcement

Announcements

The banner that can appear above every page, with start and end times.

  • →A page address (link_url)

StaleContentReport

Stale Content

The monthly list of content that has not been reviewed lately.

  • →Every record type the scan looked at

Accounts

The only record type you cannot create from a page — accounts are invited.

User

App Users

Staff and visitor sign-ins. Admins can edit every record and manage users; a regular user can only read the site.

Pages and the records behind them

Web addressPageFed by
/HomeSiteSettings, Testimonial
/i-need-helpI Need HelpHelpCategory, HelpCategoryLink, HelpCard, HotTopic
/servicesService directoryService, Term, TagAssignment, PacketSettings
/services/<slug>One service pageService, ServiceSection, NutritionProgramDetails, PacketSettings, PorchSurveyResponse
/searchSite searchTerm, TagAssignment, SitePage, Service, SearchMiss
/my-listMy list / packetPacketSettings, Service, ServiceSection (the list itself stays in the browser)
/eventsEventsMonthlyCalendar (built from the Tockify feed)
/events/calendarPrintable calendarMonthlyCalendar
/classesClassesTopic, InterestSignup (through the class-schedule function)
/caregiversCaregiversCaregiverResource
/aboutAboutTeamMember, FormConfig
/boardBoardBoardMember
/ways-to-supportWays to supportFormConfig
/referMake a referralService
Topic pages (benefits, finances, memory care, activity, technology, veterans, future planning, connection)Eight topic pagesService, FormConfig

Written into the page, not in Admin

  • /leadership — Staff cards, photos and bios are written into the page itself, not read from Team Member records.
  • /access-points — Addresses and schedules are written into the page itself.
  • /nutrition-services — Program text is written into the page itself.
  • /volunteers — Text and photos are written into the page itself.
  • /area-plan, /additional-benefits, /fraud-and-scams, /housing-and-staying-home — Page text only, no records.
  • /indigenous-elders, /lgbtq-elders, /disability-services, /adult-day-programs, /respite-for-me, /home-care-programs — Page text only, no records.

Service categories (one shared list)

The same short list drives the service directory filter, a service's own category, and a help card's “show this category” setting.

Meals & NutritionTransportationHealth & WellnessCaregiver SupportHousing & HomeSocial & ActivitiesLegal & FinancialMental HealthTechnologyOther

Before you delete a record

Nothing is removed automatically. Check the records that point at it first.

  • •Deleting a Service does not remove its sections, nutrition details, area links or tag links. They stay behind with nothing pointing at them.
  • •Deleting a form does not remove its submission log, so the log loses the form it belonged to.
  • •Deleting a photo from the Media Library leaves the records that point at it showing a broken image.

Rules that hold everywhere

  • •An id field (service_id, term_id, category_id, parent_card_id, form_slug) stores the other record's id. Change that one record and every place pointing at it changes.
  • •A slug is the web address: Service.slug becomes /services/<slug>, and FormConfig.slug is the name a page asks for.
  • •Pages hold no content of their own. They read records, so an edit in Admin shows on the site right away.
  • •Shared parts are code, not records: they only decide how records are laid out, which is why they are reused instead of copied.
  • •A record with no arrows does not depend on another record; it is edited on its own.

All 31 record types on the site are on this sheet: the 30 content records plus staff accounts.