Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Fun project
翻訳待ち
Loading the full README.
Read the full README ↗Every off-meal-plan food option around Temple University's main campus, on one map.
Live site: tueats.co
Food trucks are a big part of eating at Temple, but the only official directory is a prose page with an embedded Google My Map. It has no list view, no hours, no cuisine info, and it doesn't work well on a phone. Restaurants and cafes are scattered across Google and Yelp, with nothing scoped to campus.
TuEats puts all of it in one mobile-first place: an interactive campus map, search and filters, opening hours, and ratings and reviews from students.
America/New_York), so public pages can stay static and fast.| Layer | Technology |
|---|---|
| Framework | Next.js 15 (App Router), React 19, TypeScript (strict) |
| Styling | Tailwind CSS 4, Framer Motion |
| Maps | MapLibre GL JS + OpenFreeMap vector tiles (no API key needed) |
| Database | PostgreSQL on Supabase, accessed with Drizzle ORM |
| Auth | Supabase Auth: Google OAuth for members, email/password for admins |
| Validation | Zod 4 |
| Storage | Vercel Blob (venue photos) |
| Hosting | Vercel, with preview deploys on every pull request |
| Testing | Vitest (unit), Playwright (end-to-end) |
| CI | GitHub Actions: typecheck, lint, format, tests, build |
TuEats is a single Next.js app with no separate backend service.
Browser ──► Next.js server components (reads, static/ISR + tag caching)
└─► Server actions (writes) ──► validate (Zod) ──► authorize ──► rate-limit ──► Drizzle ──► Postgres
│
revalidateTag("venues") ◄┘
Design decisions:
src/lib/db/queries/ imports the database client. The Supabase JS client is used for authentication only.venue.type. Tables, routes (/eat/[slug]), and components never name a specific venue type, so restaurants, cafes, and vending machines can be added without a migration.venues, venue:{slug}) and refreshed exactly when an admin or member write changes them. There are no timers or cron jobs.role = "admin" on the user's profile row, which can only be set directly in the database.src/
app/ Routes: public map, /eat/[slug], /account, /about, /admin
actions/ Server actions (the only way data is written)
components/ UI, grouped by feature (map, venues, reviews, admin, …)
lib/ Business logic: hours, ratings, validation, rate limiting
db/queries/ All database reads and writes (Drizzle)
drizzle/ SQL migrations
scripts/ Data seeding and enrichment (KML import, venue enrichment)
tests/e2e/ Playwright tests
Specs/ Software design documents (scope, architecture, security, deployment)
Context/ Design system, decision log, progress log, backlog
docs/ Design notes and screenshots
Prerequisites: Node.js 22+, pnpm 10, and a Supabase project.
git clone https://github.com/abislam66/fun-proj.git
cd fun-proj
pnpm install
cp .env.example .env.local # then fill in your Supabase values
pnpm db:migrate # apply database migrations
pnpm seed:kml # optional: seed venues from TuEats.kml
pnpm dev # http://localhost:3000
| Command | What it does |
|---|---|
pnpm dev | Start the dev server |
pnpm build | Production build |
pnpm typecheck | TypeScript type check |
pnpm lint | ESLint |
pnpm format:check | Prettier check |
pnpm test | Unit tests (Vitest) |
pnpm test:e2e | End-to-end tests (Playwright) |
pnpm db:generate | Generate a migration from the schema |
pnpm db:migrate | Apply migrations |
main through pull requests. main is protected, and CI must pass before merging.main deploys to production.Context/decisions.md, and the full design docs live in Specs/.TuEats is an independent student project and is not affiliated with or endorsed by Temple University.