Windows-GPU-UNLOCK
Windows GPU UNLOCK: RTX3090 UEFI port, Korean no-reset Windows boot guide, verified source and benchmark evidence
Translation pending
Step-by-step navigation for school bus drivers.
Translation pending
OtherTypeScript · CSSGitHub @pixeldriftOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A Schoolbus Routing Solution
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
ShortStop is a Progressive Web App for school bus routing. Drivers get
spoken, turn-by-turn navigation through a route's stops and turns,
hands-free; district admins manage routes, stops, and schools from the
same app.Read the full README ↗ShortStop is a Progressive Web App for school bus routing. Drivers get spoken, turn-by-turn navigation through a route's stops and turns, hands-free. District admins manage routes, stops, and schools from the same app.
For drivers: Pick a route from the list and tap Start. Each step speaks its own instruction aloud (turn direction and street names, or a stop's cross streets and expected rider count), with a live map showing the bus's position and the route ahead. Advance with anon-screen button, a Bluetooth media remote, or automatically based on your GPS location. For stops with expected riders, a check-in roster overlays the map so the driver can mark who's boarded without losing their place.
For admins: Toggle Edit Mode on the route list to add or edit routes, reorder and edit individual stops/turns, resolve stop locations to real coordinates, and publish, unpublish, or delete routes.
src/lib/mapEngine.ts) —
requires WebGL, no raster-tile fallback (see that file's own doc
comment for why); OpenRouteService
for geocoding and the road-following route linenpm install
cp .env.local.example .env.local
Fill in .env.local (see that file for where each value is used):
DATABASE_URL — a Postgres connection string. A local Postgres works
fine for dev (e.g. postgresql://postgres:postgres@localhost:5432/shortstop);
a free hosted one works too (Neon, Vercel Postgres, Supabase, ...).ORS_API_KEY — free at openrouteservice.org.Then:
npx prisma migrate dev
npx prisma db seed
npm run dev
prisma db seed loads the sample data under public/data/ into
Postgres — safe to re-run any time. Open http://localhost:3000, and
toggle Edit Mode at the bottom of the route list to reach the admin
screens (there's no login yet — see Roadmap).
Routes, schools, stops, and the geocoding cache all live in Postgres.
There is a collection of sample route and school details in public/data/
used only to seed a local or freshly-created database (npx prisma db seed).
A route's stops can also be built by pasting or uploading a CSV/TSV
directly into the admin Add/Edit Route screen — column headers are
matched loosely (case, spacing, common synonyms), and a header-less
paste is read as a plain ordered list of stops. The recognized columns
are action, location, from_location, rider_count, side, and
notes — only action and location are ever required; location
is this row's own real position (a turn's destination road, or a
stop's own road/intersection/address), and from_location is an
optional "coming from" road, inferred from context when left blank
(see the Details link next to Upload File in that screen, or
src/lib/parseRouteImport.ts for the exact rules).
An existing route's stops can be bulk-edited the same way: the
Upload / Update button next to Download Waypoints on the Edit
Waypoints screen re-imports a file built from that same download (it
adds a row_number column) and merges it into the route in memory —
a blank cell keeps that field's current value, the word null clears
it, a row with no (or unmatched) row_number is added as new, and a
row missing from the file is dropped. Nothing is saved to Postgres
until the screen's own Save..
Once a route has stops, the Fetch Coordinates button resolves them to real coordinates (addresses via OpenRouteService, intersections via the Overpass API), caching every result so the same location is never looked up twice.
The project is pushed to GitHub, then deployed through Vercel.
Set DATABASE_URL and ORS_API_KEY in Vercel (Project Settings →
Environment Variables, Production and Preview both). next build runs prisma migrate deploy first, so
schema changes apply automatically on every deploy once DATABASE_URL
is set — but a brand-new database still needs seeding once, via the
Postgres migrate + seed GitHub Actions workflow (manually
triggered; needs a DATABASE_URL repository secret matching the
Vercel value).
beforeinstallprompt)
for a dashboard tablet - public/manifest.json has icons. See
public/icons/) and an apple-touch-icon for iOS, so installing
already works via the browser's own menu. This makes it discoverable
without a user needing to know it's there.driverName, distance, and durationMinutes are still placeholder
values on every route (src/lib/placeholderMeta.ts) until real
driver/routing data exists.StepScreen.tsx) is currently a fixed 30vh/70vh
(portrait) or 42%/58% (landscape) split, with the content pane's own
text/icon/button sizing tuned to that split via clamp() (vh-based).
Making the divider draggable needs the content pane to handle being
squeezed past its current tuning. This is likely a minimum content height
with overflow-y-auto once dragged past where the current sizing
was designed for, not just naive shrinking. Also requires a stored split
ratio and a double tap on the divider to reset back to the default.buildRailroadCrossingSteps,
parseRouteCsv.ts). What's still missing is finding these
automatically rather than an admin having to notice one on the
route sheet: an Overpass query for railway=level_crossing along
the route's own line (the same kind of lookup overpassGeocode.ts
already does for intersections), crawled retroactively across every
route to insert this waypoint type wherever a crossing turns up
along an existing leg with no dedicated row of its own yet.public/manifest.json) caching the app shell, plus IndexedDB
caching a route's own resolved data (its road geometry from
, its waypoint cache entries) the moment a
driver opens it, so can fall back to that cached copy
when a fresh fetch fails instead of just erroring. The self-hosted
PMTiles basemap (,
) and live GPS position (,
already used as-is) need no extra work either way - both already
work with no network once the tile file's been loaded once, the
browser's own HTTP cache holds onto it./api/route-geometryStepScreenpublic/maps/middle-tennessee.pmtilesmapEngine.tsnavigator.geolocationwaypointCache.ts) for double road crossings that predate the
cardinal-disambiguation feature (resolveStepCoordinate,
cardinalLabel.ts) and were instead hand-fixed with a manual
coordinate override at the time (overrideLat/overrideLon,
RawRouteRow) - Chyntara, Lou Gehrig, Cedar Park Circle, and the
Holland Ridge Dr/Holland Road corner are the known examples. A script
(in the shape of scripts/geocodeSchools.ts or similar) that finds
every cache entry with more than one real candidate at the same
waypoint key, cross-references it against routes that instead carry
an override for that same step, and retrofits the newer keyed-variant
scheme (waypointCacheKey) onto it - turning a one-off manual pin
placement into the same self-documenting disambiguation every newly
geocoded intersection already gets.RouteMap's
own pin categories independently, rather than the current all-or-
nothing overview/driving mode split.StepScreen.tsx), toggleable mid-drive rather than replacing the
current audio-first design outright. The app was originally scoped
for a tablet mounted in landscape (map ~42% of the width); the
initial prototype pivoted to phone-first, where portrait mode only
gives the map a fixed 30vh strip up top. Real-world test driving
found that frustrating - wanting to glance at the map more than the
current split allows, even with audio doing most of the work. A
toggle would swap which pane gets the dominant share (map ~65%,
turn-by-turn content collapsed to a bottom strip) using the same two
components already rendered side by side, rather than a second
screen to maintain - the open questions are just whether the choice
persists per-driver/session and how it interacts with the existing
draggable-divider idea above (same underlying split, this toggle
would just change its default before a driver drags it further).ExpandableMap's own top-right corner button, already
wired into StepScreen.tsx's map strip). Today that button just
opens a second, full-screen copy of the same map with nothing else
on screen - while actually navigating, it should instead overlay the
current step's own directions across the bottom of the screen, in a
semi-transparent box rather than a second full copy of the normal
split-screen content pane. That overlay should hide the extra chrome
the normal layout carries (the progress bar, specifically) and show
each waypoint's own icon smaller and to the left of the street/
instruction text, not stacked above it - a compact readout meant to
sit on top of the map, not compete with it for space. Distinct from
the map-centric alternate layout idea above: that one is a
persistent mid-drive toggle between two panes sized differently;
this is what the already-built full-screen expand view itself should
show once a driver actually taps it while under way.schedulePhrase, useRouteStepper.ts), which only ever compares
the moment Start was tapped against Route.departureTime. A real
per-stop version needs actual scheduled times to compare against at
each one, which don't exist yet: the route-sheet CSV already has its
own time column, but nothing parses it into anything today
(parseRouteCsv.ts's own doc comment - "NavigationStep has no
per-step time field (yet)"). Getting there means wiring that column
into NavigationStep, the database schema (a real migration -
RouteStep has no per-step time column either), and the waypoint
editor (StepRowEditor) so an admin can actually see and correct
it per stop, not just trust whatever the sheet said - a bigger,
three-layer undertaking than the depot-only version, deliberately
deferred rather than half-built.useNavigationPrompts.ts). Floated during the same
narration-redesign conversation that produced schedulePhrase
above, but deliberately not built yet - it's not obvious which real
driving moments actually want it independent of what those existing
previews and turn-completion acks already say, and there's no clean
"current road name" already sitting on a depart-kind step the way a
turn's own subheading already names the road it turns onto. Worth
revisiting once there's a clearer sense of the specific gaps it
would fill.