Github Unwrapped
Your coding year in review
Try it out live: GitHubUnwrapped.com
A platform that generates a year-in-review video for each GitHub user. Built with Vite 5, Remotion and AWS Lambda.
#Make your own
Want to make your own year-in-review for your users?
Feel free to fork and use this repository as a template! Note the legal disclaimers at the bottom of this README.
#Versions
- 2024:
mainbranch - 2023:
2023branch - 2022:
github-unwrapped-2022Repo - 2021:
github-unwrapped-2021Repo
#Setup
-
Run
npm ito install dependencies. -
Rename
.env.exampleto.env -
Set up your AWS account according to the Remotion Lambda - Setup guide. We use multiple accounts for load-balancing:
- Use
AWS_KEY_1instead ofREMOTION_AWS_ACCESS_KEY_IDandAWS_SECRET_1instead ofREMOTION_AWS_SECRET_ACCESS_KEY. - You can use
AWS_KEY_2andAWS_SECRET_2to load-balance between two accounts, or paste the same credentials as before to use the same account. - In
src/helpers/set-env-for-key.ts, we rotate the environment variables.
- Use
-
Deploy the functions into your AWS account(s):
npx tsx deploy.ts
Note that some AWS regions are disabled by default. If you get an error, enable them or limit yourself to only default ones.
-
For caching the videos and GitHub API responses, set up a MongoDB (we use a free MongoDB Atlas Cloud instance) to save the videos. Set the connection string by filling out the values in
.env. -
For fetching data from GitHub, create a personal access token in your user settings (no need to grant any scopes, the GraphQL API needs to be authenticated to get public information) and set it as
GITHUB_TOKEN_1. Adding more tokensGITHUB_TOKEN_2etc. will rotate the personal access tokens. -
Provide
DISCORD_CHANNELandDISCORD_TOKENvalues to send monitoring logs to Discord. -
Add a
SENTRY_DSNenvironment variable to get error reports.
You now have all environment variables.
Run the web app:
npm run dev
Edit the template in the Remotion Studio:
npm run remotion
To deploy, connect your repository to Render. Don't forget to also set the environment variables there too.
#Scaling strategy
To allow thousands of people to render their video at the same time, we applied multiple strategies for scaling:
- Caching the video whenever possible. Before each render, a MongoDB database lock is created to avoid multiple renders for the same GitHub user to be accidentally created.
- Renders are distributed across an array of AWS regions and accounts to prevent hitting the concurrency limit.
#Credits
We thank GitHub and For One Red for their support in realization and promoting of this project.
#Audio copyright disclaimer
The audio was licensed for GitHubUnwrapped.com from SmartSound. If you create a derivative project, you must contact them for licensing.
#License
The code in this repository: Licensed under MIT.
The Remotion framework (a dependency of this project): Companies need to obtain a paid license. Read the terms here.