Capstone Plan · Design-Based Research

Poway-Midland Railroad Digital Experience

A heritage railroad at Old Poway Park runs on volunteers, a paper calendar, and a static website. This plan proposes turning that site into a working operations and visitor platform — and then names exactly which pieces we cannot finish without the railroad itself at the table.

Nonprofit
Poway-Midland Railroad
User group
Visitors, families, volunteer crews, station staff
Owner
Ishan Jha — Scrummer
Status
Proposal — pre-build
Read this as a proposal, not a report. Nothing below has been built by this team yet. Where a claim comes from prior work — the RCR capstone, PMRR staff comments, public reviews — it is attributed. Everything else is scoped work with an owner and a sprint.

Part 1 — What We Would Build

Proposed features, each stated against what the current PMRR website actually does today. Priority badges reflect the feedback in the research section below, not our own enthusiasm.

01

Live Departure Board

Priority 1

The single question every visitor arrives with is "when is the next train, and can I get on it?" Today that answer requires reading a static table and guessing.

Now
A hand-edited HTML schedule table. Cancellations and weather closures reach visitors only if someone remembers to edit the page.
Proposed
A departure board that reads from a database: next departure, minutes remaining, seats left, and a clear "not running today" state that staff can set in one tap.

Stack: Flask + SQLite behind a JSON endpoint, Jekyll front end, polling refresh with a cached last-known-good render for offline visitors.

02

Online Reservations

Priority 1

PMRR has never had online booking. Every seat is claimed in person, which caps attendance at whoever happens to show up and makes special events hard to plan for.

Now
Walk-up only. No way to hold a seat, no record of expected attendance, no confirmation a family can show at the window.
Proposed
Pick a departure, reserve seats, receive a confirmation code. Server-side seat-conflict checks make overbooking structurally impossible rather than merely unlikely.

Stack: Flask routes with transactional seat locking, SQLite, confirmation codes generated server-side. No payment processing in this phase — see Part 2.

03

Volunteer Crew Scheduling

Priority 1

The railroad runs on volunteer crews coordinated by phone and paper. This is the feature that saves staff time every single week, which is why it outranks anything visitor-facing that looks flashier.

Now
Phone calls and a paper calendar. Nobody can see live coverage; a gap is discovered on the morning it matters.
Proposed
Volunteers see the operating calendar, claim or release shifts themselves, and a coverage bar shows which days are short-crewed weeks in advance.

Stack: Flask-Login sessions, SQLite shift table, role separation between volunteer and coordinator views.

04

Staff Admin Dashboard

Priority 1

Prior feedback from PMRR was blunt about this: a feature staff cannot update themselves becomes stale within a month and then actively misleads visitors.

Now
Any content change requires someone who can edit HTML and deploy the site.
Proposed
A login-gated dashboard where staff edit the schedule, post announcements, cancel a run, and view reservations — with no code and no deploy.

Stack: Flask-Login, hashed credentials in SQLite, audit log of who changed what and when.

05

Events & Announcements Board

Priority 2

Seasonal events are a large share of PMRR's attendance, and they are currently announced as plain text buried on a page.

Now
Undifferentiated text listings with no dates a calendar app can read.
Proposed
Searchable, filterable announcements categorized as Events, Volunteer, Operations, or Service, each with structured dates and an add-to-calendar link.

Stack: SQLite-backed posts, category filter in the client, staff-editable through the admin dashboard.

06

Interactive Fleet Encyclopedia

Priority 2

The rolling stock is the attraction. A visitor who knows what they are looking at before arriving has a better visit, and a donor who understands a restoration is more likely to fund it.

Now
A short paragraph and a handful of photos.
Proposed
A visual roster of every piece of rolling stock — photos, technical specifications, operational status, and restoration history in a modal detail view, filterable by whether it is running.

Stack: Static JSON roster, responsive card grid, accessible modal pattern with focus trapping.

07

Interactive History Timeline

Priority 2

A heritage railroad's product is history. Presenting it as a wall of prose wastes the best material the organization has.

Now
A long block of text with a few dates in it.
Proposed
Clickable eras from the 1880s to the present, each expanding into photographs, key figures, and sourced quotes. Every claim carries an attribution line.

Stack: Structured JSON timeline, progressive-disclosure UI, sourced-content policy enforced in review.

08

Membership & Donation Portal

Priority 2

Right now supporting the railroad requires contacting someone. Every step between intent and donation loses donors.

Now
A contact form and an implied "get in touch."
Proposed
Individual and family membership tiers, one-time gifts, and recurring support presented as a self-service flow.

Stack: Flask forms and records. Live payment processing is explicitly out of scope — it needs the railroad's merchant account. See Part 2.

09

Visitor Forecast (ML)

Priority 3

Useful for staffing decisions, but only once it is trained on something better than proxies. We are listing it honestly as an experiment, not a promise.

Now
No attendance prediction. Crew size is set by intuition and past Saturdays.
Proposed
A gradient-boosting model over weather, season, school calendar, and holidays, producing hourly visitor estimates with the uncertainty shown rather than hidden.

Stack: scikit-learn, Open-Meteo weather API, offline training with the fitted model served read-only. Blocked on real attendance data — see Part 2.

10

Route Map & 360° Panoramas

Priority 3

Good for pre-visit planning and for accessibility — a visitor who cannot easily walk the park can still see it.

Now
A single static site photograph.
Proposed
Switchable panoramic scenes plus an interactive map of the loop with labelled stops and accessibility notes.

Stack: Pannellum for panoramas, Leaflet with OpenStreetMap tiles, self-hosted image assets.

11

Visitor Notes Community Board

Priority 3

Worth building, but nothing user-generated ships without moderation, because a small volunteer organization cannot absorb the cost of an unmoderated board.

Now
No visitor voice on the site at all; feedback lives on third-party review platforms.
Proposed
Short visitor notes with optional photos and upvotes — behind a staff moderation queue that is part of the feature, not a later addition.

Stack: SQLite posts with a pending/approved state, image size limits enforced server-side, moderation surfaced in the admin dashboard.

12

Visit-Planning Assistant

Priority 2

Staff feedback on the prior capstone identified an assistant as the highest-value time saver, because the same handful of questions consume most of the phone calls.

Now
Repetitive questions about hours, fares, parking, and accessibility go to whoever picks up the phone.
Proposed
A widget that answers planning, history, and volunteering questions from the site's own live data, and hands off to a human when it does not know — never guessing at operational facts.

Stack: Rule-based responses over structured site data in phase one. LLM upgrade is a partnership item, not a phase-one commitment.

💬 Research Already In Hand

We are not starting from zero. A previous Open Coding Society team (RCR) built and demonstrated a PMRR platform, then published what worked and what did not. Their retro is the most valuable input to this plan.

"Although we invested significant effort in preparing the schedule system, our guests showed more interest in other functions." — RCR team retrospective, capstone/rcr

What the last team's feedback tells us to do

FindingSourceWhat we changed in this plan
GPS train tracking was unnecessary at this site's scalePMRR staffCut entirely. Not in the feature list above.
The AI assistant was the most valued feature for reducing staff workloadPMRR staffPromoted to Priority 2, scoped to answer from live site data
Staff need to update news and schedules themselvesPMRR staffAdmin dashboard moved into Priority 1 — it is a launch requirement, not a follow-up
User research should have driven where effort wentRCR retroPriorities set from staff feedback before any code is written, revisited after first user testing
Verbal articulation at the CTE Expo needed more preparationRCR retroDemo script and a rehearsed 3-minute walkthrough built in Sprint 4, not the night before
The lesson we are taking: the previous team's most-polished feature was not the one users cared about. Build order here follows staff time saved first, visitor experience second, and machine learning last.

📝 What We Would Do Differently

  • Talk to PMRR staff before choosing what to build, then again at the midpoint — not only at the expo.
  • Ship the admin dashboard with the first feature it manages, so nothing goes stale waiting for it.
  • Treat moderation, offline states, and error states as part of a feature's definition of done, not as polish.
  • Do not build GPS tracking. Prior feedback already answered this.
  • Do not present a machine learning model trained on proxies as though it were trained on real attendance.
  • Do not connect live payments until the railroad's own merchant account and approval are in place.

📋 Build Plan

Sprint 1
Foundation & staff tools

Repo scaffolding with CI, shared design system, data model, authentication, and the staff admin dashboard. Nothing visitor-facing ships before staff can edit it.

Sprint 2
Operations

Departure board, reservations with seat-conflict handling, volunteer shift scheduling. This is the sprint that saves staff time.

Sprint 3
Visitor experience

Events board, fleet encyclopedia, history timeline, membership and donation flow, visit-planning assistant.

Sprint 4
Stretch, accessibility & handoff

Route map and panoramas, moderated visitor notes, forecast experiment if data allows. Accessibility pass, staging deploy, staff walkthrough, demo script, handoff documentation.

Risks

RiskLikelihoodMitigation
No real attendance data, so the forecast stays a proxy modelHighForecast is Priority 3 and labelled an experiment; the platform is complete without it
Staff do not adopt the admin dashboardMediumBuilt in Sprint 1 and walked through with staff twice before launch; every content feature routes through it
Volunteer scheduling competes with an existing informal processMediumRead-only coverage view first, self-service claiming second, so the paper calendar can stay authoritative during transition
User-generated notes attract spam a volunteer org cannot moderateMediumModeration queue ships with the feature; the board can be disabled from the dashboard in one click
Scope grows past a school-term capstoneHighPriority 3 items are explicitly cuttable; Part 2 below exists so cut work has a documented home

Part 2 — With Partnership

These are the features we genuinely cannot finish alone. Each one names the specific thing we need from the Poway-Midland Railroad, so the ask is a decision rather than a favor.

CAM

Live Platform Camera

A live view of the station platform answers "is it busy right now?" better than any predictive model, and it costs nothing to run once it exists.

We need: an IP camera at Old Poway Park, network access for it, and a decision from the railroad about what may be shown publicly.

DATA

Real Attendance History

The forecast model is only worth shipping if it learns from actual ridership. With real ticket and headcount records, this moves from an experiment to a staffing tool.

We need: historical ticket sales or headcounts, at any granularity, even a spreadsheet of daily totals.

PAY

Live Payments for Memberships and Donations

The donation flow can be built and tested end to end, but it cannot move real money without the railroad's own account. We will not connect a payment processor on a nonprofit's behalf.

We need: the railroad's merchant or payment-processor account, and written approval to integrate against it.

AI

Full Assistant Over Real Park Data

Staff identified the assistant as the biggest time saver. Upgrading from rule-based answers to a language model grounded in real operational data is the highest-leverage next step — but only if it answers from facts the railroad has approved.

We need: approved answer content, an escalation path for questions it should not answer, and a decision on who covers model costs.

GRP

School & Group Booking

Group visits are handled entirely by phone today. A coordinator-facing booking path with custom pricing tiers would remove that bottleneck.

We need: the railroad's group pricing rules, capacity limits, and lead-time policy.

STAFF

Real Staff Accounts

The admin dashboard is built against seed accounts. Real accounts turn it from a demo into the tool the railroad actually runs on.

We need: a list of staff and volunteer coordinators, agreed roles and permissions, and an owner for account administration after handoff.

🎯 Definition of Done

  • All Priority 1 features work end to end on a staging URL the railroad can reach.
  • A staff member with no technical background updates the schedule and posts an announcement, unassisted, while we watch.
  • A visitor completes reservation and volunteer sign-up flows on a phone with no unhandled errors.
  • CI passes on main, with no credentials or API keys committed to the repository.
  • Every Priority 3 or partnership-blocked feature is documented as such, so nothing unfinished is presented as finished.
  • A written handoff covers the data model, admin procedures, known limitations, and the Part 2 asks.
The one-sentence version: build the boring tools that give volunteers their Saturdays back first, and let the beautiful visitor features earn their place after that.