A location-based community interest capture system for collecting potential event organizers and attendees across multiple cities.
/SF, /LA, /NYC)├── 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 with routing
│ ├── LocationPage.tsx # Location-specific landing pages
│ ├── CommunityInterestForm.tsx # Community interest form
│ ├── AdminDashboard.tsx # Admin interface
│ ├── TalkSubmissionForm.tsx # Legacy talk submission form
│ └── SubmissionSuccess.tsx # Success page component
├── shared/
│ └── types.ts # Shared TypeScript types
├── FEATURE_SPEC.md # Feature specification document
├── BRAND_STYLE_GUIDE.md # Design system and styling guidelines
└── README.md
ADMIN_PASSWORD: Password for admin dashboard accessYou can optionally set up Discord integration for future event coordination:
DISCORD_BOT_TOKEN: Your Discord bot tokenDISCORD_GUILD_ID: Your Discord server IDDISCORD_ORGANIZERS_CHANNEL_ID: Channel ID where organizer notifications are sentDISCORD_CATEGORY_ID (optional): Category ID for organizing talk channelsDISCORD_TEST_CATEGORY_ID (optional): Category ID for organizing test channelsDISCORD_TEST_ORGANIZERS_CHANNEL_ID (optional): Channel ID for test announcementsThe following environment variables are used for testing the Discord integration without affecting production channels:
ENABLE_TEST_API: Set to "true" to enable the test API endpoint (required for testing)DISCORD_TEST_CATEGORY_ID: Separate category for test channels to keep them organizedDISCORD_TEST_ORGANIZERS_CHANNEL_ID: Separate channel for test notifications to avoid spamming production organizersTesting the Discord Integration:
curl -X POST https://rustnyc-talks.val.run/api/discord/test \ -H "Content-Type: application/json" \ -d '{"channelName": "my-test-channel", "firstMessage": "Hello from test endpoint!"}'
Parameters:
channelName (required): Name for the test channel (will be sanitized for Discord)firstMessage (required): First message to send to the channelThis will create a test channel with the specified name, send the first message, and return an invite link. If test environment variables are configured, it will also notify the test organizers channel.
Testing Discord Invite Creation Directly:
You can also test the Discord invite creation process directly using Discord's API:
curl -X POST https://discord.com/api/v10/channels/CHANNEL_ID/invites \ -H "Authorization: Bot YOUR_BOT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "max_age": 0, "max_uses": 0, "unique": true }'
Replace CHANNEL_ID with an existing channel ID and YOUR_BOT_TOKEN with your Discord bot token. This matches exactly how the bot creates invitation links internally.
The system uses SQLite with the following schemas:
CREATE TABLE community_interest_1 (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL,
phone TEXT,
interest_type TEXT NOT NULL,
comments TEXT,
location TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE talk_submissions_3 (
id INTEGER PRIMARY KEY AUTOINCREMENT,
speaker_name TEXT NOT NULL,
talk_context TEXT NOT NULL,
is_on_behalf BOOLEAN NOT NULL,
submitter_name TEXT,
discord_channel_id TEXT,
discord_invite_link TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
POST /api/community-interest - Submit community interestGET /api/admin/community-interest - Get all community interest entries (admin, password protected)GET /api/admin/community-interest/export - Export community interest as CSV (admin, password protected)POST /api/submissions - Submit a new talk proposalGET /api/submissions - Get all submissions (admin)POST /api/discord/test - Test Discord integration (creates test channel and sends message)✅ Discord integration is fully implemented with comprehensive logging
The system will automatically:
Comprehensive Logging: The system includes detailed logging throughout the Discord integration process:
Fallback behavior: If Discord credentials are not provided, the system will use placeholder values and log what would have been done, allowing the form to still function for testing.
Debugging: Use the requests tool to view detailed logs of each submission, including all Discord API interactions and any errors that occur.
/SF, /LA, /NYC)/admin to access the admin dashboard/) to access the original talk submission form