rust-nyc-talk-submissions
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Viewing readonly version of main branch: v32View latest version
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 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)
✅ 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)