Public
Student time management and live UTA commute planner
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.

Student Commute Planner

Responsive React/Hono app for a college student's UTA commute and time management.

Current features

  • Home and campus geocoding with explicit address confirmation in the UI.
  • Walk routing with a configurable typical walk time; default is 20 minutes rather than a guessed 5-minute walk.
  • UTA GTFS + GTFS-Realtime vehicle and trip-update data.
  • Route discovery keeps the preferred route (455 by default) in the candidate set instead of filtering it out. For the currently tested West Bountiful → Weber State addresses, GTFS identifies 455 as a leg of a transfer rather than a one-seat direct trip.
  • Selected routes show the complete journey: home walk → bus leg(s) → transfer walk → bus leg → campus walk.
  • Live map with route shapes, stops, user position, and matching live vehicles. Map viewport is preserved when live data refreshes.
  • Class schedule editor used to calculate today's departure.
  • Browser reminders for “get ready” and “leave” times when notifications are enabled.
  • Canvas LMS integration using an institution URL and personal API token. Tokens are encrypted at rest and never returned to the browser; active courses and upcoming assignments can be synced.
  • Dark/light UI with explicit foreground/background colors to avoid unreadable contrast.

Planned integrations

Anki, calendar, reminders, email, eWeber, AI, and additional study/time-management services should be added as independent integrations rather than coupled to the commute logic.

Security

Canvas tokens are encrypted with CANVAS_ENCRYPTION_KEY, stored per user in the val-scoped SQLite database, and omitted from API responses.

Integrations now implemented

  • Canvas LMS: encrypted API-token storage, active courses, assignments, and Canvas calendar events.
  • Calendar: authenticated .ics export combining the entered class schedule with Canvas calendar events and assignment due dates.
  • Anki: browser-side AnkiConnect connection to a local Anki instance; no Anki credentials are stored.
  • Email: test delivery through Val Town's std/email, using the signed-in account email when available.
  • Phone push: optional ntfy.sh topic; a Val Town interval checks every 15 minutes and sends the ready/leave reminders while the app is closed.
  • AI: optional OpenAI Responses API integration, disabled until OPENAI_API_KEY is configured. Requests use store:false in the app.
  • eWeber/Banner: official registration-history entry point is exposed, while the local schedule editor remains the fallback because the student portal requires an authenticated Weber session.

Canvas OAuth is possible in Canvas installations that permit third-party developer keys, but the current implementation deliberately uses a personal access token so it does not require storing a Canvas client secret. Canvas's current API supports OAuth2 and calendar-event access.

For AI, add the server-side API key through Val Town environment variables rather than putting it in browser code.