A complete talk submission system with Discord integration for event organizers.
- Talk Submission Form: Collects speaker name, talk context, and submission type
- Discord Integration: Automatically creates channels and sends notifications
- Database Storage: Tracks all submissions with SQLite
- Responsive UI: Clean, modern interface built with React and TailwindCSS
- Form Submission: Users fill out the talk submission form
- Database Storage: Submission is saved to SQLite database
- Discord Channel Creation: A dedicated channel is created for the talk discussion
- Organizer Notification: A message is posted to the organizers' channel
- Invite Link: User receives a Discord invite link to join the discussion
βββ 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
β βββ TalkSubmissionForm.tsx # Form component
β βββ SubmissionSuccess.tsx # Success page component
βββ shared/
β βββ types.ts # Shared TypeScript types
βββ README.md
You'll need to set up the following environment variables for Discord integration:
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 channels
- Create a Discord application at https://discord.com/developers/applications
- Create a bot and copy the token
- Invite the bot to your server with the following permissions:
- Manage Channels
- Send Messages
- Create Instant Invite
- View Channels
The system uses SQLite with the following schema:
CREATE TABLE talk_submissions_1 (
id INTEGER PRIMARY KEY AUTOINCREMENT,
speaker_name TEXT NOT NULL,
talk_context TEXT NOT NULL,
is_on_behalf BOOLEAN NOT NULL,
discord_channel_id TEXT,
discord_invite_link TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
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:
- Create Discord channels for each talk submission
- Generate invite links for the channels
- Post notifications to the organizers channel
Comprehensive Logging: The system includes detailed logging throughout the Discord integration process:
- π Environment variable checks on startup
- π― API request tracking with submission details
- π§ Discord channel creation with API responses
- π Invite link generation with full details
- π’ Organizer notifications with message content
- π₯ Detailed error logging with stack traces and specific Discord error codes
- π Final result summaries
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.
- Fill out the talk submission form
- Submit the form
- Receive a Discord invite link
- Join the Discord channel to discuss your talk with organizers
To test the Discord integration:
curl -X POST http://localhost:8000/api/discord/test \ -H "Content-Type: application/json" \ -d '{"channelName": "my-test-channel", "firstMessage": "Hello from test endpoint!"}'
This will create a test channel with the specified name, send the first message, and return an invite link.
Parameters:
channelName(required): Name for the test channel (will be sanitized for Discord)firstMessage(required): First message to send to the channel
- Backend: Hono (API framework)
- Frontend: React 18.2.0 with TypeScript
- Database: SQLite
- Styling: TailwindCSS
- Platform: Val Town (Deno runtime)