A complete event check-in system for managing attendee sign-ins with secure name verification.
├── backend/
│ └── index.ts # Main API server with Hono
├── frontend/
│ ├── index.html # Main HTML template
│ ├── index.tsx # React app entry point
│ └── components/
│ ├── App.tsx # Main app component
│ ├── EventSignIn.tsx # Sign-in component with fuzzy search
│ ├── EventManagement.tsx # Management dashboard
│ └── EventCreation.tsx # Event creation form
├── shared/
│ └── types.ts # Shared TypeScript types
└── README.md
No external API keys required for basic functionality. Optional Discord integration available for future features.
The system uses SQLite with the following schema:
-- Events table
CREATE TABLE events_N (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
password_hash TEXT NOT NULL,
location TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Attendees table
CREATE TABLE attendees_N (
id INTEGER PRIMARY KEY AUTOINCREMENT,
event_id INTEGER NOT NULL,
name TEXT NOT NULL,
external_id TEXT,
FOREIGN KEY (event_id) REFERENCES events_2(id)
);
-- Check-ins table
CREATE TABLE checkins_N (
id INTEGER PRIMARY KEY AUTOINCREMENT,
event_id INTEGER NOT NULL,
attendee_id INTEGER NOT NULL,
checked_in_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (event_id) REFERENCES events_2(id),
FOREIGN KEY (attendee_id) REFERENCES attendees_1(id)
);
POST /api/events - Create a new eventGET /api/:eventId - Get event details (password protected)POST /api/:eventId/signin - Sign in to an eventGET /api/:eventId/attendees - Get attendee list for sign-in (names only)GET /api/:eventId/analytics - Get check-in analytics (password protected)GET /api/:eventId/export - Export check-in data as CSV (password protected)/ - Home page with event creation/new - Event creation form/:eventId/signin - Event sign-in page/:eventId/manage - Event management dashboard (password protected)The system accepts flexible CSV formats with attendee names. Common column headers recognized:
name, Name, NAMEfull_name, Full Name, FULL_NAMEfirst_name + last_name (will be combined)given_name + family_name (will be combined)Additional columns like id, email, etc. are preserved but not displayed to attendees.