Skip to content

Repository files navigation

CoordBash

A practice platform for contest math, in the spirit of Euclid, CSIMC, AMC, AIME, USAMO, COMC, CMO, and HMMT. Problems are original, written for CoordBash, not copied from any contest. Grading covers full proofs, not just final answers, and scores are shown against the distribution of other submissions.

Stack

Next.js (App Router) + Tailwind. lucide-react for icons, katex / react-katex wired in as a dependency for rendering math notation once statements move from plain text to LaTeX source.

Structure

src/
app/
layout.jsx shared shell: navbar + page container
page.jsx redirects to /problems
problems/page.jsx problem list, filters by difficulty, format, topic
problems/[slug]/page.jsx single problem: statement, tabs, submission editor
submissions/page.jsx a user's submission history (reached via account menu)
profile/[username]/page.jsx public profile: streak, rank, solved counts
components/
Navbar.jsx gradient logo, search, notifications, streak, account avatar
AccountMenu.jsx dropdown from the avatar circle
NotificationsMenu.jsx dropdown from the bell icon
SideRail.jsx left icon rail: Problems, Explore, Study Paths, My Lists
HeroCarousel.jsx promo banner row above the problem list
TopicChips.jsx topic filter row with per-topic counts
FormatTabs.jsx All / Proof / Numerical toggle
DifficultyBadge.jsx Easy / Medium / Hard / Advanced pill
FilterSidebar.jsx difficulty, format, and topic checkboxes (list view filters)
ProblemsTable.jsx problem list rows
ProblemStatement.jsx renders statement text and any figures
SubmissionEditor.jsx proof/answer entry, image attachment, grading result
PercentileAxis.jsx score plotted on an axis with a percentile marker
SimilarContestPicker.jsx "have you seen a similar problem on a contest" prompt
StreakCalendar.jsx right-rail streak widget
TrendingContests.jsx right-rail panel of most-tagged contests
Tabs.jsx small reusable tab bar
data/
problems.json mock problem set, replace with the real bank
contests.json contests used only as reference tags, not a source
topics.json topic taxonomy for filtering
users.json mock signed-in user
lib/
percentile.js percentile-rank scoring helpers

Data model notes

Problem carries difficulty (Easy/Medium/Hard/Advanced), format (Proof/Numerical), topics (array, multi-select filter), points (max score, meaningful mainly for Proof format), images (figures for geometry-style problems, read by the grading model's vision step when present in a submission too), and stats.

Submission (not yet a JSON file, wire up once a backend exists) should carry the submitted text, any attached images, a score out of the problem's points, and a percentile computed from lib/percentile.js against that problem's score distribution. Proof-format problems are graded on quality, not just correctness, so score is a partial-credit integer, never a boolean.

Contest tags are community-submitted links between a CoordBash problem and a real contest problem it resembles, gathered through SimilarContestPicker. They are display-only signal, never treated as the problem's source, since every problem here is original.

Next steps to wire up a real backend

  1. Replace the JSON files in src/data with API calls (REST or a database client), keeping the same shapes so the components need no changes.
  2. Point SubmissionEditor's handleSubmit at a real grading endpoint that accepts text and image attachments and returns a score plus written feedback.
  3. Add auth and swap the hardcoded users[0] in layout.jsx for the signed-in session.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages