adarsh7203's blog

By adarsh7203, 4 months ago, In English

Hello everyone!

I built CF UpsolveX, an automated upsolving companion for Codeforces.

It consists of a full-stack web application along with a Chrome extension that helps you track, prioritize, and consistently upsolve the problems you missed in contests.


Problem:

While participating in Codeforces contests, I often found myself saying:

"I'll upsolve the remaining problems tomorrow."

But after a few contests, dozens of unsolved problems start piling up and it becomes difficult to decide:

  • Which problems should be upsolved first?
  • Which contests still have pending problems?
  • How much progress has been made overall?
  • Whether I am actually being consistent with upsolving?

Since upsolving is one of the most important aspects of improvement in competitive programming, I felt there should be a better system for tracking and prioritizing missed problems.


Solution:

So I built CF UpsolveX.

It automatically tracks your missed problems across Codeforces contests, prioritizes them intelligently, and helps you stay consistent with upsolving.

The project consists of:

  • A full-stack web application.
  • A Chrome extension integrated directly into Codeforces.

Both work individually and remain perfectly synchronized.


Core Feature — Smart Priority Queue:

Instead of showing hundreds of unsolved problems in a flat list, CF UpsolveX ranks every problem using a custom priority algorithm:

Priority = w₁ × Recency + w₂ × Difficulty + w₃ × Attempts

The algorithm considers:

  • Recency — Recent contest problems rank higher (exponential decay).
  • Difficulty — Gaussian bell curve around YOUR rating.
  • Attempts — More failed attempts during the contest = higher priority.

Features:

Web Application:

  • Analytics Dashboard: Upsolve Velocity, Completion Rate, Current Streak & Rating Progression charts.

  • Contest History: Solved vs Upsolved vs Unsolved statistics & Progress tracking for every contest.

  • Prioritized Upsolve Queue across all contests.

  • User customization options: Maximum problem index filtering, Virtual contest toggle & Personalized preferences.

  • Automated Email reminders after each contests.


Chrome Extension:

  • Adds a CF UpsolveX button directly to the Codeforces navbar.

  • Sleek sidebar integrated into Codeforces.

  • Displays: Pending problems, Completion percentage & Current streak.

  • Shows top-priority problems with ratings and division badges.

  • One-click synchronization.

  • Problem index filtering without leaving Codeforces.

  • Works seamlessly alongside the web application.


Web App Screenshots:

Spoiler

Chrome Extension Screenshots:

Spoiler

Download:

Website:

https://cfupsolvex.netlify.app/

Chrome Extension:

https://chromewebstore.google.com/detail/cf-upsolvex-companion/aeflackekjfejbcgaednpccgadpponaa


Use Cases:

  • Track missed problems across contests.
  • Prioritize what to upsolve next.
  • Maintain consistency in upsolving.
  • Analyze upsolving progress.
  • Improve competitive programming performance.

Tech Stack:

  • Frontend: React + Vite, Recharts
  • Backend: FastAPI, APScheduler, Jinja2
  • Database: Supabase (PostgreSQL)
  • Extension: Chrome Manifest V3
  • APIs: Official Codeforces API
  • Deployment: Netlify + Render

Links:

Codeforces Profile:

https://codeforces.me/profile/adarsh7203

LinkedIn Post:

https://www.linkedin.com/posts/adarsh7203_competitiveprogramming-codeforces-webdevelopment-ugcPost-7475847205392760832-qTlN/


Feedback:

I would really appreciate your feedback and suggestions!

If you find this useful, please consider upvoting.

Thank you and Happy Upsolving!

  • Vote: I like it
  • +1
  • Vote: I do not like it

»
4 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

Most tools just show you data and call it innovation. This one actually solves a real problem. CF UpsolveX turns post-contest chaos into a structured improvement system with tracking, upsolve management, and analytics that are actually useful. Smart, practical, and clearly built by someone who understands competitive programming deeply. Amazing work, Adarsh absolutely loved it.

»
4 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

very useful tool brother....

»
4 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

I have a feeling that its vibe-coded, i mean no offense, vibe coding is fine, I had something similar thing for my personal use, I feel like it should actually help in upsolving, like recommended questions before trying new one, or anything you know, simply stating that these questions left will not help in upsolving.

But still thanks for giving out something, feel free to think about my suggestion and add something valuable to your product..

  • »
    »
    4 months ago, hide # ^ |
    ← Rev. 2  
    Vote: I like it 0 Vote: I do not like it

    mannat_kathuria Hey Bhai, thanks for the feedback and for keeping it constructive!

    I totally understand the concern, but I'd like to clarify — CF UpsolveX doesn't just "state questions left." The core feature is a Smart Priority Queue that actually tells you what to upsolve next using a weighted scoring algorithm:

    Priority = w₁ × RecencyScore + w₂ × DifficultyScore + w₃ × AttemptScore

    • RecencyScore = e^(−days/30) — exponential decay so recent contest problems rank higher
    • DifficultyScore = e^(−δ² / 2σ²) — Gaussian bell curve (σ=300) centered around your current rating, targeting the sweet spot for growth
    • AttemptScore = min(1.0, 0.25 × failedAttempts) — more wrong attempts during contest = known weak spot = higher priority

    These formulas are also mentioned on the website**

    So it's essentially doing what you suggested — recommending which problems to tackle before moving on to new ones, ranked by how much learning value they offer for you specifically. O That said, your feedback about making the "helping in upsolving" aspect more prominent is valid — maybe the blog post or landing page didn't communicate it clearly enough, which is on me. I'll work on making that clearer.

    Thanks again for the suggestion bhai, Always open to ideas to make it better:)