BioBlitz banner

BioBlitz

18 devlogs
91h 56m 35s

Updated Project: Before ft, the project was built for a hackathon and was bare bones. This update includes a rewrite of the entire project, adding a rating system, contest editor, the ability to take contests, profiles, and much more!
Competiti…

Updated Project: Before ft, the project was built for a hackathon and was bare bones. This update includes a rewrite of the entire project, adding a rating system, contest editor, the ability to take contests, profiles, and much more!
Competitive biology platform for the masses. The platform let’s people take contests and post them of their own, creating a hub for biology prep. Especially useful for MCAT prep for completely free.

This project uses AI

I used AI to solve some syntax errors as well as for ideas for how I could improve the project. I would like to also note that this project was worked on by some of my friends as well, who may have used AI tools for designing some frontend pages. I took the time, however, to clean up these, and add my own style to the web app.

elifeldman769

Devlog IV: Bioblitz V1

So most of this time was spent again debugging the profile picture issue, and fixing deployment issues.


What changed


1. Service account bug

Fix

  • I believe that the reason some profile pictures were not showing was because the service account expired / was invalidated, causing the storage bucket to not be accessed.
  • Everything was available in the storage, but not accessible due to a permissions issue.
  • I made another service account, and granted it the permissions in google cloud, however this only brought back the google pfps and not the users that uploaded them
  • I attempted to redownload from profile urls which didn’t work because of a billing issue, that I will need to fix later

2. Deployment issues

System

  • So for some reason there were 4-5 deployments, which we had to reduce to just 1 made by vercel.
  • An issue we’ve been running into was that we neeed one person who hosted the deployment on their account to deploy whenever a commit is made to github.
  • To solve this, we created a shared account, however it is quite annoying having to manually redeploy.

3. Rating inactivity bonus + early entry

Algorithm

  • Ok so the idea is if people are not on the platform for multiple weeks or months, then their rating might have changed a lot. So, if their performance dropped, it’ll converge faster at their actual elo at that time
  • Also, a problem was encouraging people to play contests when they aren’t autorated, so I added a 2x multiplier for these early participants.

4. Finished about page

Feature

  • Added more writing to finish the about page with more sections!

Attachment
Attachment
0
elifeldman769

Devlog III: Bioblitz V1.1

Overview:
For the past few hours, I have stayed up pretty late writing the about section to the website, featured at https://bioblitz.net/about if you would like to check it out.


What changed


1. About page

Feature

  • I envisioned a computer, that would shift to show each of the respective pages accompanied by text. I took a transparent background image of a pc from canva, and then moved around a div of image that pulled from an array of ids.
  • Each of ids was the respective page, which would take min-h-screen. At the next section, the image would change to the next relevant one.
  • It took a while to write the first few descriptions, but was rewarding seeing it come together well.

2. Bug fixes

Fix

  • On auth, the sign up button from before would show for a split second. I removed this
  • Create was assumed the channel was named the same as the user, causing some redirects to fail. I made it the users channel name instead.

3. Scroll state handling

System

  • Implemented scroll-based state tracking using getBoundingClientRect() to determine the active section
  • Synced section index with UI state to control which image is rendered
  • Added smooth opacity transitions for images to prevent flickering between sections

Attachment
Attachment
Attachment
0
elifeldman769

Devlog II: Bioblitz V1.1

Overview:
literally gave myself a headache trying to debug a pfp issue. Also, I made several updates to the rating system.


What changed


1. Participation floor bonus

Algorithm

  • So an issue I noticed in the rating system was that people who were 500 rated were being discouraged from competing on the platform since they did not progress as fast.
  • In the hopes of making the platform more beginner friendly, I added a bonus, so that people at 500 rating or lower ratings would get a shifted score distribution in a sense.
  • I rolled this out and A/B tested and players were more likely to play another blitz

2. Pfp failed loading

Fix

  • Issues with deployment made this arise with profile pictures and all other images not loading
  • They are fetched from google, and I really had no idea how to approach this.
  • first, I looked at the storage bucket, and env vars, which were all fine
  • I came to find after multiple hours that it was just the storage.ts and firebase rules written incorrectly which I could fix

3. Rating convergence

Algorithm

  • Rating could now converge faster at the actual value by basic using quadratic decay to the multiplier, until a user hits their first 25 contests. Before this, they will gain and lose a lot more rating.
  • This was inspired by the chess.com system, where the first many games rating is quite variable, and then it will eventually stabilize.

4. Search auto indexing

System

  • I made it so that every day, the indexing of the search will happen automatically.
  • Before this was a manual action, so having this really helped automate the process

Attachment
Attachment
Attachment
0
elifeldman769

Devlog I: Bioblitz V1.1

This is the first devlog of the updated platform. There are many changes I envision being made, which involve better support for other devices, chat features, a markov chain based recommendation system, bug fixes, and much more to come! A lot of todays work was handling auth states, a tricky and annoying endeavor.


What changed


1. Auth bug

System

  • There was a persisting issue that took me over an hour to solve, which involved after sign in the updated auth state not being recognized.
  • I solved this by storing the state in a cookie, and deleting this cookie on sign off.
  • Users now get instant auth via the cookie being added when they sign in.

2. Contest filters

Feature

  • This is something I want to tweak in the future, but I added a simple filter that users can use to filter by topics, the status of the contest, and the type.
  • Type just checks if it is created by mitosisphere for official. Later, I want to include all staff/ admin roled people in this.
  • Topics come from a drop down menu, so there are only a fixed amount of possible blitz topics. Each are buttons that will filter the contest cards by a certain topic.
  • Finally, status will check if the user has submissions for each of the respective blitzes and only show the requested type.

3. Better routing for users that aren’t signed in

System

  • While trying to get the app on google search console, I ran into issues with pages not being indexed due to them needing auth.
  • The solution to this is to allow all pages to be viewed, of course with the exception of actual contest submissions and gated pages, but with limited ability.
  • Actions check if(!user){ return; }, however if(!user) the pages will not route to /, rather will have a different button that will redirect to the sign in page. This is on every contest, as well as when trying to add a friend.
Attachment
Attachment
Attachment
Attachment
0
elifeldman769

Devlog: Bioblitz V1 Launch + Tweaks


Overview

I want to preface by thanking everyone who voted on the project. After advertising in bio discord servers, we have reached a total of 235 users. Many of these people are hopefully enjoying the platform. Thanks for testing and providing feedback, which I will consider for future versions.


What changed


1. Google Search Console fixes

System

  • Fixed duplicate user canonical error by explicitly setting canonical URLs in metadata
  • Resolved redirect issues caused by inconsistency between www and non-www domains in sitemap and redirects

2. Blitz editor UI tweaks

UI

  • Added option for users to declare AI usage in blitz creation
  • Implemented pagination for questions with clickable navigation
  • Updated typography to use DG-Sans for improved readability

Attachment
Attachment
0
elifeldman769

Shipped this project!

Hours: 66.17
Cookies: 🍪 1455
Multiplier: 21.99 cookies/hr

BioBlitz V1 Ship

I compete in the USA Biology Olympiad, and a major challenge is the lack of high-quality practice problems. Most students rely on textbooks and expensive prep courses. BioBlitz solves this by providing an accessible competitive biology platform, fostering a community of problem solvers and creators. Users can take and publish question sets called Blitzes.

Technical Rating System

User ratings are calculated by:

ΔR_u = max(1, (π̂_u - p_b) * f(R_u))

Where:

  • ΔR_u = change in user rating
  • π̂_u = adjusted user percentile based on contest score
  • p_b = percentile of the blitz (contest difficulty)
  • f(R_u) = scaling function reducing rating changes as R_u approaches mastery

Features in V1

1. Blitz & Contest Creation

  • Users can create new Blitzes with custom questions.
  • Drafts are saved until published, and edits propagate live to participants.

2. Leaderboards

  • Track user performance on Blitzes.
  • View question-level analytics and compare ratings dynamically.

3. Rating System

  • Everyone starts at 500 rating.
  • Rating changes depend on performance relative to other participants and contest difficulty.
  • Scales to prevent low-rated users from losing too much early.

4. Problem of the Day (POTD)

  • Daily biology questions to encourage consistent practice.
  • Linked directly to user ratings and contest participation.

5. Admin & Staff Controls

  • Moderation tools: report users, delete contests, validate usernames, and adjust ratings.
  • Admins can search users by username, handle reports, and manage contests efficiently.
elifeldman769

Devlog XIII: Bioblitz V1

Launch is within grasp. I wrote an info page for better marketing.


What changed


1. About page

Feature

  • This is quite self explanatory, however writing this much content took a lot of time.
  • Also, something cool I added was a fixed computer on the right hand side.
  • When people scroll, new images appear on the computer overlapping the screen, showing the referenced feature.

2. Sitemap

System

  • I made a script with sitemap.ts and sitemap.config.ts to take all instances in the users and sets db and create paths dynamically.

3. Notifications

Feature

  • Users are now sent notifications for when certain events occur, such as a blitz getting rated or a friend request being sent
  • People can now dismiss these which are also linked to the related event

4. Various bug fixes

Fixes

  • Notifications stayed for deleted users/contests
  • Subscribers and channel data stayed for deleted users
  • Problem of the day not calling the handler function
Attachment
1

Comments

Zain Marshall
Zain Marshall 17 days ago

Good luck on your ship!

elifeldman769

Devlog XII: Bioblitz V1

We are getting close to launch now, so I tidied up a few things with UI and bugs.


What changed


1. Users are categorized by rating group

Feature

  • To incentivize progression, similar to one codeforces, users names are now different colors based on their rating, the system has several tiers.
  • This will update the bg and also ring too for use on the leaderboard and contest leaderboard.

2. Updated admin page

System

  • An issue I ran into was the necessity to load every user instance to modify one user’s data
  • Added username search to directly query and pull user info
  • Admin can modify fields tied to uid for moderation

3. Updated rating graphs

Feature

  • Before, the graphs were quite finicky
  • Now they work better, with improved white style and gradient
  • Profile page split into tabs to reduce clutter

4. Blitzes completed tab

Feature

  • Users can see past completed blitzes with elo delta and contest rating
  • Each contest is linked, hover lightens bg
Attachment
Attachment
Attachment
Attachment
Attachment
0
elifeldman769

Devlog XI: Bioblitz V1


What changed


1. Rating system update

Algorithm

  • Ok so something I noticed after creating a script to replay all of the past contests and update users ratings is that users were mostly still at ~500 rating, with most people falling even below 500 rating. - This was due to the current system making people taking a 500 rated contest need to get in the top 20th percentile to gain any rating, with average performance being -45.
  • My solution to this was to shift over the distribution of scores with users rating such that the pi hat applied is shifted by a factor of x, which scales negatively exponentially, so as the user approaches 1000 rating the shift does not occur anymore (see illustration).

2. Better analytics on contests

System

  • Users can now see for other users on a contest leaderboard what questions they got right/wrong.
  • Admins can track tab switches and time off tab, and decide whether to ban/punish that user
  • Note for future: implement ui to ban/ punish users with handling as well.
  • Another idea: I could create an algorithm to detect suspicious behavior by users, taking into account time off tab, their rating, past performance, and the contest performance.
Attachment
Attachment
Attachment
0
elifeldman769

Devlog X: Bioblitz V1


What changed


1. UI improvements

UI

  • Instead of bg-black, I found bg-neutral-900 to be much more appealing for dark mode.
  • Note to self: implement a light mode on the platform as well, and go with the users system default.
  • For the aesthetic, I tried to stick with white and neutral-900, with hints of yellow-300 (tailwind).
  • I removed some gradients on the contest page to make the home page more simplistic which I like better.

2. The start of rating graphs

Feature

  • I made an early attempt to try to implement rating graphs, however this failed.
  • It currently takes each elo delta that is applied, and applies each one at a time to create the eventual graph plotted by time of contest delta.

3. Tweak of rating system

Algorithm

  • I noticed that users at the default elo of 500 were losing often even ~50 elo for average performance on contests.
  • I made it so that at this level users could only gain rating, taking max of 1, delta if rating is below 600
Attachment
Attachment
0
elifeldman769

Devlog IX: Bioblitz V1


What changed


1. Reporting users

Feature

  • Users can now select on a users page to report that user.
  • They may select from several options, which will be saved in the db with a reportCount
  • Each report is a seperate entry, with a message along with it.
  • Future: add to admin page a page that renders reports for moderation to handle

2. Deleting contests for admins

System

  • Those with admin role will have an X next to each contest.
  • This brings up a confirmation for admins to delete certain contests, allowing for moderation.

3. Contest drafts

Feature

  • If a contest has been started during creation, but not officially published, it will stay hidden as a draft.
  • These will not show up on the contests page, but are still visible to the channel owner.

4. Editing contests

Feature

  • Enabled contest editing, where users can make changes to their past contests
  • This will update the contest for other users taking the contest, even if live.
Attachment
Attachment
Attachment
Attachment
0
elifeldman769

Devlog VIII: Bioblitz V1

This development period was very grueling and tedious, mostly involving the roll out of the new rating system, involving much manual testing


What changed


1. Admin page optimization

System

  • The admin page initially fetched all user instances and each field for each user. This was causing thousands of reads due to the large scale of current users on the MVP (220).
  • To reduce this, I implemented a button that will enable the table rendering.
  • I also added a search function to the page, that will query by email, username, and name.
  • Updated count function to use .count() instead of a for loop to save reads.

2. Roll out of new rating system

Algorithm

  • Per the previous dev log, I implemented a large scale rating system update, which takes a log based approach based on percentiles.
  • This involved many updates. Firstly, each user was reset to 500 rating, and I decided to calculate the deltas and apply them based on already completed past contests.
Expected percentile:
piHat = 1 / (1 + 10^((Rc - Rp)/400))

K-factor:
K = 50 * exp(-(Rp - Rc)/1000)

Experience multiplier:
Mexp(n) = 1 + 4 * (1 - n/25)^2    if n < 25
Mexp(n) = 1.0                    if n >= 25

Inactivity multiplier:
Minact(d) = min(1 + 0.01d, 2)

Final delta:
deltaRaw = (K * (pi - piHat)) * Mexp * Minact * Mearly + floorBonus
Attachment
0
elifeldman769

Devlog VII: Bioblitz V1


What changed


1. Admin system improvements

System

  • Added admin script
  • Updated admin page to allow updating of roles

2. Username validation system

Security

  • Created username checker handler to ensure it did not include any inappropriate words or duplicates.

3. Rating system overhaul

Algorithm

  • Reworked entire rated system, sent all users back to 500 rating. Used log based percentile approach.

Fixes

Fixes

  • Admin role not correctly updating
  • UI formatting issues on profile page

Attachment
0
elifeldman769

Devlog VI: Bioblitz V1


What changed


1. POTD system expansion

Feature

  • Staff users can now add to the problem of the day queue, which will be able to be moved around along with other questions. Adding a POTD allows answer choices, multi select, a status, explanation, and topic. They can also add images to the questions.
  • Users can now play past POTD, and keep track of how many they have done.

2. Platform fixes

Fixes

  • Profile pictures faulty loading
  • Sitemap not showing up
  • Compete notifications were not being sent

Attachment
Attachment
0
elifeldman769

#Devlog V: Bioblitz V1


What changed


1. Profile + channel system

Feature

  • Card with users roles/tags, user email, and users name.
  • Tag based on their streak on POTD, and the ability to edit their profile to show others. This info is tied to their uid
  • Created a channel page where users can see the contests they created, whos index updates with user changing their username.

2. Infrastructure + security fixes

Infra

  • Fixed firebase rule issue on search indexing for reading the db.
  • Protected write access solely for people of the admin role.

3. Search system improvements

Search

  • Fixed bug with search indexing routing to /contests/[contestid] instead of /home/[contestid]
  • Made search indexing more robust to find semantic text matches.

Attachment
Attachment
0
elifeldman769

Devlog IV: Bioblitz V1


What changed


1. Contest page + rating system

System

  • I worked on building the contest page, which would show info about the contests, and also when clicked would initiate the contest.
  • This is handled through a database entry gameSubmissions/[uid] where each users performance is stored.
  • This then goes to a rating handler to calculate rating delta.

2. Rating system design

Algorithm

  • Every new player begins with a rating of 500.
  • Contest ranking is determined by questions correct, with time as a tiebreaker.
  • Each contest receives a rating based on participant strength and difficulty.
  • Expected performance is modeled using an Elo-style logistic function.
  • Rating change is based on difference between actual percentile and expected percentile.

  • K-factor scales based on rating difference between player and contest.
  • New players have increased volatility through an experience multiplier.
  • Inactive players receive a multiplier to re-adjust rating faster.
  • Early participants receive a temporary bonus multiplier.
  • Underdogs receive a small floor bonus to prevent harsh penalties.
  • First place players cannot lose rating.

Attachment
0
elifeldman769

MiniDevlog III: Bioblitz V1


What changed


1. Compete tab

Feature

  • I created a compete tab to the web app, where users can send challenges to their friends. This adds to the competitive community aspect of the platform.
  • Currently, this does not give a rating boost.
  • However, you can compare Elo with your friends and view challenges.
  • When a challenge appears a card pops up linked to the contest.

Attachment
0
elifeldman769

MiniDevlog II: Bioblitz V1


What changed


1. Marketing emails

Engagement

  • To keep user retention, we will inevitably need to send occasional marketing emails with new features as well as platform updates.
  • To keep happy users, I implemented a popup that would appear at the next time a user logged in, prompting for a confirmation for marketing emails.
  • In settings, users may always turn this off, and unsubscribe from emails.
  • On their first log in, when setting their username the user must also agree/disagree to emails.

2. First login basic tutorial

Onboarding

  • During users’ first login, a menu appears explaining how the ELO system works and anchoring them into the platform.
  • On this page, the user is required to provide their username so we can create their profile page.

Attachment
0
elifeldman769

Initial Devlog I: Bioblitz V1


What changed


1. Side Navbar

UI

  • I noticed that the navbar was becoming too clumped as I started to add a searching feature. So, I implemented navigation from the side.
  • Icons are used to denote each page, taking inspiration from the styling on Instagram.
  • Icons fill white when on that page.
  • On hover, the component will become highlighted
  • When clicking on another page, the bar will collapse until the user moves back to it

2. Notifications

Backend

  • Users can be sent notifications when people accept/decline friend requests
  • When a new blitz is posted users also get notified.
  • Users may click on these notifications to link to the relevant event (e.g. going to new blitz / viewing friends profile)

3. Search function

Search

  • Today I began implemented a search function that used static indexing to fetch relevant pages.
  • Each possible page is tagged by USER, CONTEST, CHANNEL, and PAGE, which appear in that order of priority.
  • I was thinking of adding a more advanced semantic search that converted the query into nlp embedding, and used a transformer model to select the relevant predictions for pages. Maybe in a future devlog I will do this.

Attachment
Attachment
Attachment
0