Changelog
Every update to AlgoPath, newest first.
Admin solutions panel — load any problem, generate per-language solutions via AI, write or edit code in four languages, add an explanation, and preview exactly how it will render before saving.
Mark as Done now asks "How'd it go?" — choose "Solved it myself" (full XP) or "Needed a peek" (reduced XP). No pressure; both count toward your streak.
Bad "principal" tag removed from problem database — was a data entry error with no matching CP concept.
Solve activity heatmap (free) — GitHub-style calendar on your profile showing solve frequency over the past year.
Average hints stat (free) — profile stats bar now shows your average hints used per solve.
Export notes as Markdown (now free) — download notes for any problem as a .md file; previously Pro-only.
Hint history now available to Pro — Pro users see their most recent hint session; Elite sees full history across all sessions.
Tag-aware random — "Pick a Problem for Me" now respects the active tag and difficulty filters.
Report a bug — floating button on every page opens a modal that submits a bug report directly to the team.
First-time welcome banner — new users with no solves see a contextual welcome card pointing them to hints.
Problem page titles — browser tab now shows the problem number and title (e.g. "#42 Two Sum — AlgoPath").
Stripe plan downgrade grace period — subscriptions on past_due (card retry in progress) no longer immediately revert to free.
Profile skill web — duplicate tags (e.g. "Recursion" twice) fixed by normalizing tag case before counting; "linkedlist" now displays as "Linked List".
"Stuck? Get a hint →" inline link added to the problem card so hints are accessible without scrolling to the footer.
Skip confirmation now offers "Too hard — try easier" to automatically fetch a lower-difficulty problem.
"Skip problem" button changed to outline style for better visibility in the problem footer.
"Decide for me" intent card now includes a one-line explanation of why to use it over manual browsing.
Hint session history now shown for Pro (last session) and Elite (full history) — was previously Elite-only in the UI despite the API supporting both.
Export as Markdown now correctly triggers a download in all browsers (anchor was not attached to DOM before click; revoke was racing the download).
Browser tab title now updates when a problem is loaded client-side (search result, random, resume) — was only set on hard navigation.
"Too hard — try easier" option in skip confirmation is now blue to visually distinguish it from the amber skip action.
Model selection (Pro+) — choose your preferred OpenRouter model for hint generation from the hints panel; preference is saved to your profile.
Hint style (Elite) — switch between Structured (default), Socratic (question-framed), and Minimal (condensed) hint display from the hints panel.
Adaptive difficulty (Elite) — toggle in the hints panel; marks your profile for contest-level hint depth.
Export notes as Markdown (Pro+) — download all notes for a problem as a .md file from the Notes panel.
Hint history (Elite) — the hints panel shows all past session dates for each problem.
Insights dashboard (Elite) — /insights shows solve rate by difficulty, avg hints per solve, weak topics, and a 14-day XP trend chart.
Streak freeze (Pro+) — activate from your profile to absorb one missed day; resets monthly.
Stripe integration — Pro and Elite plans now have working checkout, webhook handler, and customer portal. Plans are enforced server-side on hints and notes.
Plan gating — AI code review is Pro/Elite only; free users see a clear upgrade prompt. Notes daily limit (3/day free) now shows an inline message with upgrade link instead of silently failing.
Pricing page redesign — billing toggle (monthly/yearly), compact tier cards, feature lists aligned below each panel, and current plan highlighted for signed-in users.
Admin plan tool — /admin/plans lets admins search any user by username or email and update their plan instantly.
Free plan expanded — drill mode, problem recommendations, and tag-based filtering are now explicitly listed as free features.
XP gain notification — after marking a problem solved, a rank-colored card shows +XP earned, progress bar to next level, and a Level Up badge when applicable.
Skill web — profile page now shows a radar chart visualizing tag-level strength across solved problems.
Drill mode — start a focused session on any tag from the Problems page; problems queue up back-to-back until you stop.
Bulk hint generation now uses the model router with fallbacks and retry logic — no more silent failures on free models.
Performance — blocking Supabase fetches moved behind Suspense on key pages; FCP and LCP improved across /profile and /display-problem.
Post-solve: "Try this next" card — after marking a problem done, a targeted recommendation appears (same topic, one step harder) with Practice / Pick something else options. Replaces the previous 1.5s auto-load.
Editorial link — solution panel now shows a direct link to the official editorial when one is available.
"Pick a Problem for Me" now respects the platform filter — if CF or LC is selected in the filter bar, random picks stay on that platform.
Intent screen — practice page now opens with "What do you want to practice today?" offering three fast paths: Decide for me, Practice a topic, or Browse problems.
Filter bar — platform chips (CF / LC / All), tag input, and difficulty input now sit above the search box for quick browsing.
Clickable tags — tags on problem cards and the loaded problem are now buttons; clicking one instantly searches problems with that tag.
Guest access — the practice page is now viewable without an account. Hint 1 is free; hints 2 and 3 prompt sign-in. Mark as Done shows a sign-in CTA instead of being hidden.
Onboarding trim — steps 4–6 (goal, language, daily target) are now marked Optional with a "Start practicing →" shortcut that skips straight to the app.
Difficulty matching overhauled — random and recommended problems now use a ±200 Codeforces rating window instead of coarse Easy/Medium/Hard buckets, giving much better difficulty targeting.
Recommended problem was going stale when no new candidates were found — it now always refreshes after each solve.
Landing page demo updated to a dynamic programming problem (Coin Change) to better represent the app's competitive programming focus.
Landing page updated with dual-audience messaging for both interview prep and competitive programming; recommended problem strip shows CF and LC examples side by side.
Practice page codebase refactored into focused modules (types, formatting, side-panel) — no user-facing changes, faster future development.
Admin problem management — full CRUD API for creating, editing, and removing problems from the database.
Performance — navbar streams independently so page content appears faster; KaTeX stylesheet scoped to the practice page only; homepage is now fully static.
Official v1.0 release — streak break detection, PostHog analytics, "Continue where you left off" on the practice page, skip warning, and improved notes system.
Complete problem viewer redesign with integrated code editor, collapsible sidebar panels, and improved navigation.
Redesigned landing page — feature sections, live hints demo, AI code review preview, and a closing CTA; focused on getting new users to sign up and start immediately
Focus system — users can set a practice focus (Interview Prep / Competitive Programming / Both) from the practice page; biases random problem selection toward LeetCode or Codeforces accordingly
Random problem selection now uses weighted platform bias (3:1) instead of hard filtering — comp programming focus favors Codeforces but still surfaces LeetCode problems occasionally, and vice versa
Practice page UX — "Continue where you left off" now appears above the search controls for returning users, and the random problem button is renamed to "Pick a Problem for Me" with a dice icon
Onboarding flow extended — captures skill level and focus preference, applies both immediately to problem recommendations
Code editor redesign — improved syntax highlighting theme, dark background, and editor color consistency across the side panel
Streak reset logic — streak now correctly resets to 0 when a day is missed rather than holding the stale value
Add-solution admin page now supports per-language code input and shared explanation field with live preview
Activity page — timestamped log of all solves, problem views, notes, and AI reviews, with filter tabs and per-category counts
Problem view tracking — each problem visit records first/last viewed and view count; shown below the problem card
Solve timestamp log — every solve is now recorded in a dedicated table with XP earned and hints used, enabling per-solve history
timeAgo() utility for human-readable relative timestamps (just now, 3m ago, 2d ago, etc.) used throughout the app
Code editors (problem viewer + notes) now use Prism.js syntax highlighting with a dark theme overlay — Tab indents 2 spaces, Enter preserves indentation
Problem viewer panels (Notes, Code Editor, AI Review) moved to fixed side tabs that slide in from the right edge without displacing page content
LaTeX sub/sup vertical alignment restored — Tailwind preflight was resetting browser defaults for subscript and superscript positioning
Inbuilt code editor in notes — save code alongside prose notes for any problem
Changelog page (this page)
LaTeX symbols (\ldots, \le, \leq, \geq, Greek letters, arrows, etc.) now render correctly in problem statements
Notes limits enforced at DB and UI level (title 200, content 10k, code 200k chars)
Notes saved to Supabase — one-time migration from localStorage, with automatic fallback if table unavailable
Notes panel on problem display page — quick-create notes linked to the current problem from a slide-out panel
AI model router — automatically selects best available free OpenRouter model per task type, falls back on rate limits
Bulk hint generation — admin page can auto-fill AI hints for all problems missing them, with a live progress stream
Sentry error reporting was silently double-initialising; removed legacy sentry.client.config.ts
AI hint generation errors now propagate correctly to the SSE stream and Sentry
Gamification — XP, levels, and streak system for solving problems
Streak nudge banner in nav when streak is at risk for today
Mark as Done awards XP based on difficulty and hints used
AI code review panel — paste your code and chat with an AI mentor about your approach
Difficulty suggestion — users can suggest a more accurate difficulty rating for any problem
Problem reports — users can flag issues with problems (wrong difficulty, broken link, etc.)
Recommendation and AI suggest results are cached to reduce API calls
Report description field is now optional
Progressive hints system — reveal up to 3 hints per problem, rate each one
Solutions panel with syntax-highlighted code in C++, Python, Java, and JavaScript
AI-powered problem suggest — describe what you want to practice, get matched problems
User-aware random problem selection based on skill level and solved history
Initial launch — search and browse competitive programming problems from Codeforces and LeetCode
Supabase auth (email + OAuth)
Problem display with inline statement, difficulty, and tags
Notes (localStorage) — quick notes tied to problems