The Takes Project#
More deets coming soon 👀 🏔️ 📹#
A slack bot that tracks takes and accepts uploads; developed with 💖 @ Hack Club
⚠️ Highly opinionated slack bot warning - Project rapidly iterating
🚧 Dev#
You can launch the bot locally with bun
bun install
bun dev
you will also need to launch an ngrok tunnel and update your dev slack manifest to point to the ngrok tunnel
bun ngrok
you also need to create a .env file with the following keys
SLACK_BOT_TOKEN="xoxb-xxxxx-xxxxx-xxxxx-xxxxx"
SLACK_SIGNING_SECRET="xxxxx"
SLACK_SPAM_CHANNEL="C069N64PW4A"
SLACK_LOG_CHANNEL="C08KX2YNN87"
SLACK_REVIEW_CHANNEL="C07P0CXT08H"
SLACK_LISTEN_CHANNEL="C08NEE6FVJT"
NODE_ENV="dev"
SLACK_USER_TOKEN="xoxp-xxxxx-xxxxx-xxxxx-xxxxx"
API_URL="https://casual-renewing-reptile.ngrok-free.app"
SENTRY_DSN="https://xxxxxx@xxxxxx.ingest.us.sentry.io/xxxx"
DATABASE_URL="postgres://username:password@host:5432/smokie"
CDN_TOKEN="cdn_token"
🔌 API Docs#
all endpoints are prefixed with /api and return JSON unless specified otherwise
GET /api/video?media=<url>
returns an HTML page with a video player for the given media URL
GET /api/recentTakes?user=<userId>
returns recent takes, optionally filtered by user ID
- if user not found, returns
404with an empty takes array - returns up to 40 takes ordered by creation date (newest first)
- includes project info and total time stats
GET /api/projects?user=<userId>
returns project info
- with user param: returns a single project for that user
- without user param: returns all projects
- returns empty array if no projects found
typical take object looks like:
{
id: string;
userId: string;
notes: string;
createdAt: Date;
mediaUrls: string[];
elapsedTime: number; // seconds
project: string;
totalTakesTime: number; // seconds
}
📜 License#
The code is licensed under AGPL 3.0! That means AGPL 3.0 requires publishing source code changes when the software is used over a network, guaranteeing that users can access the code. All artwork and images are copyright reserved but may be used with proper attribution to the authors.
© 2025-present Kieran Klukas