What’z ur type?: Automated Gallery System for Creative Community
(opens in new window)Behind The Project
justfont ran a creative Discord community where each month had a fixed theme. Designers created work around these monthly themes and shared their creations in dedicated Discord channels for feedback and discussion. These creations represented the team’s creative energy, but they were disappearing into Discord’s endless scroll.
The situation created real pain points. Great work went unnoticed because theTre was no way to highlight outstanding contributions. Designers had no central collection. Everything was scattered across messages. When someone shared multiple iterations of a design, the conversation and context got buried between unrelated posts.
We needed a system that automatically collects creations from Discord and presents them as a beautiful, organized collection, without anyone manually uploading or tagging anything.

(opens in new window)Solution & Approach
I built What’z ur type? Collection, an automated creative gallery that syncs Discord community work to a searchable platform. The system has two main parts: a Discord bot that runs via GitHub Actions to sync messages and images, and a Next.js web application that displays and organizes the content.

The bot fetches the latest messages from Discord each day, uploads images to AWS S3, and stores records in PostgreSQL. A smart merging algorithm groups related posts from the same designer within a one-hour window into single gallery items. The web platform provides individual creator profiles with activity calendars, masonry gallery layouts with lightbox viewing, and role-based authentication through Discord OAuth so only server members can access the platform.
(opens in new window)Technical Challenges
(opens in new window)Smart Message Merging
When designers share work on Discord, they typically post their images separately from their accompanying text. A designer might upload a design, then immediately follow with a message explaining their creative inspiration, design decisions, or reflections on the work. These related messages arrive within minutes of each other, but treating them as separate gallery items fragments the story behind each creation.
I designed a merging algorithm that groups messages from the same user within a one-hour window into a single gallery item. The algorithm combines all text content and attachments from the group, preserving the complete context and story while presenting it as one cohesive piece. The one-hour threshold is long enough to capture related posts but short enough to avoid merging unrelated work.
(opens in new window)Incremental Sync Optimization
The original sync approach was naive: it fetched 100 messages and checked each one against the database individually. This meant 100 database queries every single day, even when only a handful of new messages existed.
I optimized this with timestamp-based filtering. The bot fetches the timestamp of the newest message already in the database (one query), then filters the fetched Discord messages to only process those newer than that timestamp.

(opens in new window)Handling Discord Rate Limits
During the initial historical sync of 2,000+ messages, Discord’s rate limits caused the bot to get throttled and eventually kicked. I implemented exponential backoff with batch processing, waiting one second between batches during normal operation, and progressively longer delays when rate-limited. This allowed the full historical import to complete without errors and ensures daily syncs handle activity bursts gracefully.
(opens in new window)Topic Assignment Edge Cases
Messages posted in the first few days of a month were often continuations of the previous month’s creative theme. Assigning a November 2nd post to November’s topic felt wrong when the designer was clearly finishing October’s work.
I implemented a five-day grace period: messages posted on days 1 through 5 of any month are automatically assigned to the previous month’s topic. This creates more cohesive topic collections and matches how designers actually work. They often need a few extra days to wrap up a theme.
(opens in new window)Discord OAuth with Role Verification
The web app uses Discord OAuth for authentication, but with an extra layer. Standard Discord OAuth provides basic user info but doesn’t reveal server roles. I needed to verify that users hold specific roles before granting platform access.
I combined Discord provider with a Bot Token API call that checks the user’s server roles after OAuth completes. Only users with designated team roles can access the platform. This approach required careful handling of edge cases. Users who leave the server, expired tokens, and the distinction between bot tokens and OAuth tokens all needed specific error handling.
(opens in new window)Impact & Results
Since launching in November 2024, the platform has become essential to justfont’s creative culture. The system has processed hundreds of Discord messages into cohesive gallery items through smart merging, automatically preserving the complete context behind each creation. Active creators now have individual portfolio pages with GitHub-style activity calendars that visualize their creative output over time, transforming scattered Discord messages into a professional showcase of their work.

The gallery created a sense of community identity. When designers browse through months of typography experiments, they realize they’re part of a creative collective, not just a work team. The MVP system highlights outstanding contributors each month. New server users browse the archive to understand community’s design culture, and senior designers reference past explorations for inspiration.
The platform also serves a practical business purpose. When pitching to clients, we can demonstrate justfont’s internal creative culture with a polished portfolio rather than raw Discord screenshots. Years of design work are now archived, searchable, and accessible, building an institutional memory of the team’s creative evolution.
The technical architecture has proven both efficient and sustainable. Daily syncs run automated through GitHub Actions with zero manual intervention. The incremental sync optimization achieved significant reduction in database queries compared to the naive approach, processing only new messages instead of re-checking the entire history every day. Since launch, the system has maintained zero data loss through automated backups and careful error handling.
Most importantly, the platform has changed team behavior. The platform now serves dual purposes: internally as a creative resource where designers browse past work for inspiration and understand the community’s design evolution, and externally as a polished portfolio for client presentations that demonstrates the community’s creative culture without relying on raw Discord messages.

(opens in new window)Lessons Learned
Building this system taught me that automation is the foundation of community tools. Manual uploads don’t scale. If the sync process required any human intervention, the gallery would have gone stale within weeks. Using GitHub Actions for scheduled tasks proved that serverless approaches work well for periodic jobs, and keeping infrastructure costs at zero made the project sustainable long-term.
The biggest technical insight was that smart data processing saves far more resources than raw optimization. Incremental syncs, message merging, and timestamp-based filtering each contributed modest individual improvements, but combined they transformed a system that hammered the database into one that barely touches it.
On the product side, I learned that making work visible is as important as storing it. The activity calendars, MVP badges, and creator profiles weren’t technically complex features, but they were the ones that actually changed team behavior and drove the increase in creative sharing. Recognition features matter more than I initially expected. They turned a passive archive into an active community tool.