Data sources

Everything the Advocate reads that it does not own. Campus services are reached only through the egress door, fetched by the operator on a schedule, parsed against their contracts, and kept as shared feeds; a vendor that drifts from its contract produces an unknown, never a wrong answer. Reference data lives in the repository, dated and sourced. Each ERD below is drawn from the same schema the contract tests enforce; every field shows its sensitivity class (see Sensitive data).

flowchart LR
  dining["Campus Dining (synthetic)"]
  transit["Regional Transit (synthetic)"]
  places["Campus Places (synthetic)"]
  careers["Campus Careers (synthetic)"]
  lms["Class Site LMS (synthetic)"]
  catalog["Help catalog"]
  rules["Benefit rules and playbooks"]
  colleges["Colleges"]
  weather["National Weather Service"]
  op((Operator))
  egress{{Egress door}}
  store[(App store)]
  repo[(Repository)]
  dining --> egress
  transit --> egress
  places --> egress
  careers --> egress
  lms --> egress
  weather --> egress
  egress --> op
  op --> store
  catalog --- repo
  rules --- repo
  colleges --- repo
  repo --> app[Advocate]
  store --> app
Source Kind How it is read Where it lands
Campus Dining (synthetic) campus service (synthetic twin) The operator fetches locations, a week of hours and today's menus for each student's campus. campus_feeds (shared, not about any student)
Regional Transit (synthetic) campus service (synthetic twin) GTFS-style routes and stops, a trip planner, and live arrivals and alerts. The operator plans each bus rider's trip to their first class; live times count for ten minutes. campus_feeds.stops (shared); commute_plans and transit_now (per student)
Campus Places (synthetic) campus service (synthetic twin) Study spaces, room availability and campus events (free food among them). A booking is a dispatch with an idempotency key, confirmed by looking it up. campus_feeds (spaces, events); dispatches (bookings, per student)
Campus Careers (synthetic) campus service (synthetic twin) Job postings with weekly schedules and a fair-chance flag, and a mentor directory. An introduction the student approves sends only their first name and note. campus_feeds (postings, mentors); dispatches (introductions)
Class Site LMS (synthetic) campus service (synthetic twin) The student's own courses, assignments and announcements, read with their class-site token (sealed, granted only to the sync). deadlines (assignments, deduplicated by class-site id); classes (room changes)
Help catalog reference data in the repository Verified programs and services, shaped after the Open Referral data specification. Each entry has a source and a verification date; stale entries are never offered as current. read in place; nothing copied per student
Benefit rules and playbooks reference data in the repository Dated parameters (poverty guidelines, SNAP limits) with sources and effective periods; playbooks as declared steps. A date outside every period answers unconfirmed, never a stale number. read in place; playbook progress lands in playbook_runs
Colleges reference data in the repository One file per college: name, county, website and career center. Adding a college is adding a file; the builder drafts its county scouts. read in place
National Weather Service public web service The forecast for the student's campus, through the egress door, for weather closures and bus delays. used in the moment; not stored

Campus Dining (synthetic)

The operator fetches locations, a week of hours and today's menus for each student's campus.

erDiagram
  DiningLocation {
    string id PK "public"
    enum campus "public"
    string name "public"
    enum kind "public"
    string building "public"
    number lat "public"
    number lon "public"
    enum_list accepts "public"
  }
  Period {
    string name "public"
    string open "public"
    string close "public"
  }
  MenuItem {
    string id PK "public"
    string name "public"
    string station "public"
    number price "public"
    number calories "public"
    string_list tags "public"
    string_list allergens "public"
  }
  DiningLocation ||--o{ Period : "opens for"
  DiningLocation ||--o{ MenuItem : "serves"

Regional Transit (synthetic)

GTFS-style routes and stops, a trip planner, and live arrivals and alerts. The operator plans each bus rider's trip to their first class; live times count for ten minutes.

erDiagram
  Stop {
    string id PK "public"
    string name "public"
    number lat "public"
    number lon "public"
    enum campus "public"
    number distance "public"
  }
  Itinerary {
    object_list legs "public"
    string depart "public"
    string arrive "public"
    number minutes "public"
    number transfers "public"
  }
  Leg {
    string route "public"
    string routeName "public"
    string trip "public"
    string from "public"
    string to "public"
    string depart "public"
    string arrive "public"
  }
  Arrival {
    string trip "public"
    string route "public"
    string headsign "public"
    string scheduled "public"
    string predicted "public"
    number delayMinutes "public"
    number inMinutes "public"
  }
  Alert {
    string id PK "public"
    enum effect "public"
    string header "public"
    string_list routes "public"
  }
  Stop ||--o{ Arrival : "predicts"
  Itinerary ||--|{ Leg : "is made of"
  Leg }o--|| Stop : "boards at"

Campus Places (synthetic)

Study spaces, room availability and campus events (free food among them). A booking is a dispatch with an idempotency key, confirmed by looking it up.

erDiagram
  Space {
    string id PK "public"
    enum campus "public"
    string name "public"
    string building "public"
    enum kind "public"
    enum noise "public"
    boolean outlets "public"
    boolean bookable "public"
    number seats "public"
    record hours "public"
    string closes "public"
  }
  Reservation {
    string id PK "internal"
    string room "public"
    string date "personal"
    string start "personal"
    number minutes "internal"
    string name "personal"
  }
  Event {
    string id PK "public"
    enum campus "public"
    string date "public"
    string start "public"
    string end "public"
    string title "public"
    string kind "public"
    string_list tags "public"
    string where "public"
    boolean free "public"
  }
  Space ||--o{ Reservation : "is booked by"

Campus Careers (synthetic)

Job postings with weekly schedules and a fair-chance flag, and a mentor directory. An introduction the student approves sends only their first name and note.

erDiagram
  Posting {
    string id PK "public"
    enum campus "public"
    string title "public"
    string employer "public"
    boolean onCampus "public"
    boolean workStudy "public"
    number pay "public"
    number hoursPerWeek "public"
    object_list schedule "public"
    boolean fairChance "public"
    string field "public"
    string closes "public"
  }
  Mentor {
    string id PK "public"
    enum campus "public"
    string displayName "public"
    string field "public"
    string role "public"
    string_list languages "public"
    string_list experiences "public"
    number openSlots "public"
  }
  MentorRequest {
    string id PK "internal"
    string mentor "internal"
    string firstName "personal"
    string note "personal"
    string createdAt "internal"
    enum status "internal"
    string reason "internal"
    object meeting "personal"
  }
  Mentor ||--o{ MentorRequest : "receives"

Class Site LMS (synthetic)

The student's own courses, assignments and announcements, read with their class-site token (sealed, granted only to the sync).

erDiagram
  LmsCourse {
    number id PK "internal"
    string name "personal"
    string course_code "personal"
    string term "personal"
  }
  LmsAssignment {
    number id PK "internal"
    string name "personal"
    string due_at "personal"
    number points_possible "personal"
    string_list submission_types "personal"
    string html_url "personal"
    number course_id "internal"
  }
  LmsAnnouncement {
    number id PK "internal"
    string title "personal"
    string message "personal"
    string posted_at "personal"
    string context_code "personal"
  }
  LmsCourse ||--o{ LmsAssignment : "assigns"
  LmsCourse ||--o{ LmsAnnouncement : "announces"

Help catalog

Verified programs and services, shaped after the Open Referral data specification. Each entry has a source and a verification date; stale entries are never offered as current.

erDiagram
  Resource {
    string id PK "public"
    string name "public"
    string organization "public"
    enum_list categories "public"
    object serves "public"
    string hours "public"
    string phone "public"
    object eligibility "public"
    string_list howToApply "public"
    string_list documents "public"
    object source "public"
    date verifiedOn "public"
    number freshnessDays "public"
  }
  Scout {
    string id PK "public"
    string_list owns "public"
    url_list sources "public"
    enum admitted_by "public"
  }
  Resource }o--|| Scout : "is kept fresh by"

Benefit rules and playbooks

Dated parameters (poverty guidelines, SNAP limits) with sources and effective periods; playbooks as declared steps. A date outside every period answers unconfirmed, never a stale number.

erDiagram
  DatedParameter {
    object value "public"
    date effectiveFrom "public"
    date effectiveTo "public"
    url source "public"
    date verifiedOn "public"
  }
  Playbook {
    string id PK "public"
    string title "public"
    Step_list steps "public"
    string_list sealed "public"
    enum admitted_by "public"
  }
  Step {
    string id PK "public"
    enum kind "public"
    string text "public"
    record branches "public"
    number timeout_days "public"
  }
  Playbook ||--|{ Step : "runs"

Colleges

One file per college: name, county, website and career center. Adding a college is adding a file; the builder drafts its county scouts.

erDiagram
  College {
    string college "public"
    string name "public"
    string short "public"
    string county "public"
    string state "public"
    url website "public"
    object career "public"
  }

National Weather Service

The forecast for the student's campus, through the egress door, for weather closures and bus delays.

erDiagram
  Forecast {
    string name "public"
    number temperature "public"
    string shortForecast "public"
    date_time startTime "public"
  }

Verified by