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 channelsDISCORD_TEST_ORGANIZERS_CHANNEL_ID
(optional): Channel ID for test announcements
The following environment variables are used for testing the Discord integration without affecting production channels:
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 organizers
Testing 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!"}'
Parameters:
channelName
(required): Name for the test channel (will be sanitized for Discord)firstMessage
(required): First message to send to the channel
This 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.
- 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
- Backend: Hono (API framework)
- Frontend: React 18.2.0 with TypeScript
- Database: SQLite
- Styling: TailwindCSS
- Platform: Val Town (Deno runtime)