{"id":50513865,"url":"https://github.com/artcodestudio/wn-events-plugin","last_synced_at":"2026-06-02T22:03:10.753Z","repository":{"id":361248225,"uuid":"1253729705","full_name":"ArtCodeStudio/wn-events-plugin","owner":"ArtCodeStudio","description":"Winter CMS plugin: events/Führungen with calendars, scale prices, image galleries and bookings (local replacement for a Firebase solution).","archived":false,"fork":false,"pushed_at":"2026-05-29T18:56:43.000Z","size":31,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T20:21:33.617Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ArtCodeStudio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-29T18:56:09.000Z","updated_at":"2026-05-29T18:56:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ArtCodeStudio/wn-events-plugin","commit_stats":null,"previous_names":["artcodestudio/wn-events-plugin"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/ArtCodeStudio/wn-events-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArtCodeStudio%2Fwn-events-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArtCodeStudio%2Fwn-events-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArtCodeStudio%2Fwn-events-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArtCodeStudio%2Fwn-events-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ArtCodeStudio","download_url":"https://codeload.github.com/ArtCodeStudio/wn-events-plugin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArtCodeStudio%2Fwn-events-plugin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33838221,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-02T22:03:05.625Z","updated_at":"2026-06-02T22:03:10.737Z","avatar_url":"https://github.com/ArtCodeStudio.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JumpLink.Events – Winter CMS Plugin\n\nManage **events / guided tours (\"Führungen\")** in [Winter CMS](https://wintercms.com)\n(a fork of OctoberCMS): calendars, events with tiered/scale prices and image\ngalleries, plus a frontend booking flow that stores requests and sends\nconfirmation emails.\n\nThis plugin was built to replace a previous **client-side Firebase/Firestore**\nsolution with a fully local, server-side implementation. It ships a JSON API\n(in the legacy data shape) and a one-off Firestore import command to ease that\nmigration.\n\n## Features\n\n- **Calendars** – backend-managed groups (e.g. *Watt / Land / Fluss / Spezial*)\n  with title, colour, description and images.\n- **Events** – title, slug, type (`fix` = scheduled / `variable` = on request),\n  start/end datetime, location, equipment, notes, an image gallery and\n  **scale prices** (per-person price, group fix price, min/max participants,\n  \"each additional unit\"). A per-event **\"show price\"** switch controls whether\n  a price is displayed at all.\n- **Bookings** – booking requests are stored in the database (backend list with\n  status workflow + new-request counter) **and** emailed to the organiser, with\n  an optional confirmation copy to the customer.\n- **Frontend JSON API** – public read endpoints for calendars/events plus a\n  booking endpoint (honeypot + server-side validation + rate limit).\n- **Settings** – default notification recipient, sender, customer-copy toggle.\n- **Import command** – pull existing calendars/events from a Firestore project.\n\n## Requirements\n\n- Winter CMS (tested on v1.2 / Laravel 9 / PHP 8.4)\n\n## Installation\n\nPlace the plugin in `plugins/jumplink/events` (or require via Composer) and run:\n\n```bash\nphp artisan winter:up\n```\n\n## Backend\n\nA **Führungen / Events** main menu provides:\n\n- **Events** – list/create/edit with tabbed form (details, prices, gallery,\n  notification recipients, bookings).\n- **Calendars** – list/create/edit, drag-to-reorder.\n- **Bookings** – all requests with status filter and search.\n\nSettings live under **Settings → Events**.\n\n## Frontend JSON API\n\nPublic routes (no CSRF, API style):\n\n| Method | Endpoint | Purpose |\n|---|---|---|\n| `GET`  | `/api/jumplink/events/calendars` | active calendars |\n| `GET`  | `/api/jumplink/events/events`    | filtered events (legacy Firestore JSON shape) |\n| `POST` | `/api/jumplink/events/book`      | create a booking request |\n\n`GET /events` query parameters: `type` (`fix`\\|`variable`\\|`all`), `calendar`,\n`excludeCalendar`, `active` (`true`\\|`false`\\|`all`), `startTime`\n(`future`\\|`past`\\|`all`), `limit`, and for detail lookups `id` / `handle` /\n`title`.\n\n`POST /book` fields: `event_id` or `handle`, `firstname`, `lastname`, `email`,\n`phone`, `quantity`, `date`, `street`, `zip`, `message`. Leave the hidden\n`website` field empty (honeypot).\n\nEvents are returned in the shape the original Firebase frontend expected\n(`id`, `handle`, `title`, `type`, `calendar`, `startAt`/`endAt` ISO strings,\n`prices`, `notifications`, `images[{src, w, h, …}]`, `showPrice`, …), so an\nexisting rivets/JS frontend can switch data source without template changes.\n\n## Firestore import (migration helper)\n\n```bash\nphp artisan jumplink:events-import --dry-run     # preview\nphp artisan jumplink:events-import               # import (idempotent via firestore_id)\nphp artisan jumplink:events-import --force        # re-import / overwrite\n```\n\nOptions: `--project`, `--key`, `--domain`, `--media` (path to already-downloaded\nimages that get attached to the imported events). The Firebase web API key is a\npublic client identifier; restrict access via Firebase security rules.\n\n## License\n\nMIT. Built by [JumpLink / Art+Code Studio](https://artandcode.studio).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartcodestudio%2Fwn-events-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fartcodestudio%2Fwn-events-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fartcodestudio%2Fwn-events-plugin/lists"}