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.
Loading the full README. The saved excerpt is shown below.
A full-stack trip-planning app: travelers build day-by-day itineraries from a shared,
crowdsourced attraction database, schedule them on a per-day calendar (including flights,
accommodation stays, and free-form time slots), track a multi-currency budget, and
collaborate on a trip with other users.
Live app: https://trip-planner-beta-dusky.vercel.app/
API docs: /api-docs (Swagger UI) — see also swagger.yaml
See also: SPEC.md (system spec, ERD, full endpoint table), PRD.md
(product requirements), DESIGN.md, FLOWS.md,
WIREFRAMES.md, PRESENTATION.md.Read the full README ↗A full-stack trip-planning app: travelers build day-by-day itineraries from a shared, crowdsourced attraction database, schedule them on a per-day calendar (including flights, accommodation stays, and free-form time slots), track a multi-currency budget, and collaborate on a trip with other users.
Live app: https://trip-planner-beta-dusky.vercel.app/
API docs: /api-docs (Swagger UI) — see also swagger.yaml
See also: SPEC.md (system spec, ERD, full endpoint table), PRD.md
(product requirements), DESIGN.md, FLOWS.md,
WIREFRAMES.md, PRESENTATION.md.
TripPlanner is built around one idea: attractions are global, shared, crowdsourced objects (name, location, category, "mood" tags), while trips are where an attraction gets a schedule (planned date/time, duration, and — for residences — trip-specific stay dates and price). The same museum can be linked into many different users' trips without duplicating its data; only the per-trip scheduling is trip-specific.
Core features:
CalendarSection) that places
attractions, flights, and free-form time slots on a timeline, including overnight-spanning
blocks (e.g. a hotel stay or overnight flight) and an auto-fit day window.Attraction document, while
stay dates/price/notes live on the trip's schedule entry so the same residence can be
reused across trips with different dates each time./analytics page./admin,
restricted to users with role: "admin".Next.js 16 (App Router) serves as both frontend and backend — there is no separate
Node server. Pages under src/app/** are the frontend; route handlers under
src/app/api/** are the REST API, backed by MongoDB via Mongoose. See
PRESENTATION.md for the full architecture writeup.
DESIGN.md), Context API for auth/attraction-taxonomy state, Leaflet for
maps.api/trips, api/attractions, api/auth, api/users, api/attraction-types,
api/attraction-categories, api/mood-tags, api/analytics, api/explore, plus
api/geo and api/route proxies for map boundary/routing lookups). Business logic for
the two largest domains (trips, attractions) lives in src/lib/services/; every route is
wrapped in a shared error-handling/logging/CORS layer (src/lib/withApiHandler.ts).src/models/*.ts). See SPEC.md for the
full ERD.jsonwebtoken) + bcrypt-hashed passwords (bcryptjs). Sessions are a
7-day JWT in Authorization: Bearer <token>; there is no server-side session store.Map features are built from four external services, proxied through Next.js API routes
(api/geo/*, api/route/*) to avoid CORS and to attach required headers (e.g. a custom
User-Agent, which these free public instances require):
GET /api/geo/city and GET /api/geo/country
(src/app/api/geo/{city,country}/route.ts).GET /api/route/valhalla (src/app/api/route/valhalla/route.ts), which actually calls
OSRM instances at routing.openstreetmap.de (the public Valhalla demo is unreliable).
Returns turn-by-turn geometry and duration.GET /api/route/transit (src/app/api/route/transit/route.ts). Returns
itineraries with per-leg transit lines and encoded polylines; falls back to Valhalla
walk, then car, when no transit route is available.Client-side consumers: src/services/geo.service.ts (boundaries) and
src/services/routeTransit.service.ts (point-to-point routing, exposing fetchRouteLeg
and fetchAirportLeg).
User 1──N Trip (owner) Trip N──N User (collaborators)
Trip N──N Attraction (attractionIds, shared/global entity)
Trip 1──N ScheduleEntry (Trip.schedules — keyed by attractionId, or a synthetic
"cs-*"/"fl-*" id for schedule-only custom-slots/flights)
Attraction N──N AttractionType ──1 AttractionCategory
Full field-level ERD: SPEC.md.
This is the beginning of the README. Read the rest at the original. Read the full README ↗