Inspiration

I am a high school student. Last spring I sat down to build my own college list and found that every tool I tried did one of two things: it guessed at my chances with a confident-looking percentage, or it showed me numbers without saying where they came from.

Neither helps when the decision is this expensive. A "42% chance" claims precision nobody has, and a number without a source asks you to trust it blindly.

I also noticed who this hurts most. Families who can pay for private admissions counseling have someone to sort through it for them. Students with limited access to college-planning support are left with dozens of websites and a lot of guesswork.

I wanted a tool that tells the truth, including when the truth is "nobody publishes that," and that any student can use. So I built Matricula.

What it does

Matricula builds a college plan from official U.S. data and shows where every number comes from. It covers every college in the U.S. Department of Education's College Scorecard. It runs on the web and as an iPhone app from the same code.

Start with your profile. Enter your GPA, test scores, budget and intended majors, or upload a transcript and resume and let the app read them.

Every college, scored against real data. Any U.S. college in the federal dataset can be searched, matched and scored using live College Scorecard data. That covers admission rate, SAT and ACT ranges, net price, graduation and retention rates, median earnings and median debt. Career outcomes come from the Bureau of Labor Statistics Occupational Outlook Handbook.

See how the score was built. The scoring is rule-based and open. Overall Fit is a weighted blend of six sub-scores:

Sub-score Weight
Academic 25%
Major and program 25%
Financial 15%
Career and ROI 15%
Outcome 10%
Extracurricular strength 10%

If a college does not publish the data a sub-score needs, that sub-score is left out and the other weights are rebalanced. No college loses points just for reporting less.

Chances are ranges, not percentages. Admission likelihood is worked out separately from fit and always shown as a labeled range: Far Reach, Reach, Target, Likely, Safety, Financial Safety, or Insufficient Data.

Extra detail, checked by hand. Federal data does not say what a college looks for in an applicant. For many colleges, Matricula adds details checked against the college's own published documents. That includes Section C7 of the Common Data Set, where a college rates fourteen admission factors as Very Important, Important, Considered or Not Considered. For example, MIT rates rigor and character as very important and does not consider legacy at all, taken from MIT's own page rather than a forum. Each of these entries records its source link, year, review date and confidence level.

The rest of the process:

  • College search across the full federal dataset
  • A majors and programs explorer, including minors, honors tracks and research programs
  • A career planner built on BLS pay and growth projections
  • An Essay Center that tracks every prompt and deadline for each college, with a story bank you can reuse
  • An Apply tab with each college's application platform, every deadline type, and what is still left to do

Free and Matricula. Exploring colleges and majors is free, and that includes your first five personalized matches. A $9.99 monthly subscription unlocks the full match list, the AI advisor, the Essay Center, and the Apply tab with its timeline. Premium screens stay visible with a short preview and an Unlock button. The paywall only opens when a student taps Unlock.

Nothing is made up. If a college does not publish a figure, the app shows "Data unavailable" instead of an estimate made to look like a fact.

How we built it

Front end. React and Vite. The same app is packaged for iPhone with Capacitor 8. The website and the iPhone app use the same menu, with a bottom tab bar on phones.

Back end. Node and Express, with SQLite through Node's built-in node:sqlite module. There is no native build step, so the project runs after a single npm install. Twenty-seven tables hold profiles, saved lists, programs, essays, timelines and cached responses.

Accounts. Firebase Auth handles sign-in (email, Google on the web, or Guest), and each user's data is kept separate by their Firebase user ID.

Payments with RevenueCat. The iPhone app uses RevenueCat's Capacitor SDK and its Paywall UI. There is one entitlement, matricula, sold through the default offering as one monthly package ($rc_monthly, product monthly, $9.99). I designed the paywall in the RevenueCat dashboard as a Free vs Matricula comparison, so I can change it without rebuilding the app.

The app checks that one entitlement in a single place. When a purchase or restore finishes, the screen updates right away without restarting the app. The RevenueCat customer ID is the student's Firebase user ID, never an email address. Guests get an anonymous ID, and a guest's purchase moves to their account if they sign in later. If RevenueCat cannot load, the free features keep working and premium stays locked.

Keeping data safe. All API keys stay on the server. The app only talks to its own /api/* routes, and responses are cached in SQLite so the app keeps working when an outside data source is slow or limits requests.

How to try it

  • Website: live at matricula.up.railway.app with every feature open. The paywall only exists in the iPhone app.
  • iPhone: Matricula is not on the App Store, since the Next Gen track does not require it. The repository includes a GitHub Actions workflow that builds the iPhone app on a cloud Mac and produces an installable .ipa file. I installed that file on my iPhone with Sideloadly using a free Apple ID, and the demo video was recorded on that build.
  • Purchases: in this build, purchases go through RevenueCat's Test Store. Buying, restoring and unlocking all work the way they would in a real release, but no money is charged.
  • Building your own copy: you need your own Firebase and RevenueCat test values, added as GitHub settings. No keys are stored in the repository.

Deployment. The website runs on Railway. The iPhone app is built by GitHub Actions.

Challenges we ran into

Refusing to guess is harder than guessing. A missing value has to pass cleanly through six sub-scores, the weight rebalancing, the admission categories and the interface. At every one of those steps the easy option is to fill in a default. Getting "Data unavailable" all the way to the screen took more care than the scoring math did.

Official data is messier than it looks. Federal datasets are updated field by field, so one college's figures can come from more than one reporting year. Rather than claim a year I could not confirm, the app labels exactly what it is showing.

Phones work differently. Several libraries that work fine in a browser behave differently inside an iPhone app. Getting sign-in to work reliably on iOS meant changing how the app starts up there.

Testing purchases without a paid developer account. I do not have a paid Apple developer account. To test the full purchase flow on a real iPhone, I build the app in the cloud with GitHub Actions and install it with Sideloadly. Setting that up came much earlier in the project than I expected.

Too many sections. The app grew to sixteen top-level sections before I stopped and cut it to seven. I merged pages that showed the same data three different ways and removed a section that repeated what other tabs already covered.

Accomplishments that we're proud of

Every U.S. college, with nothing made up. Any college in the federal dataset can be matched and scored. Every value in the app is labeled Official, Verified, Estimated or Unavailable, from the database through the scoring to the screen.

Common Data Sets read and transcribed by hand, each with a source link, year, review date and confidence level. Not scraped, not generated. I read them.

Scoring you can check. The weights, thresholds and fallback rules are explained inside the app.

A working product. Live on the web, running as an iPhone app from the same code, with subscriptions through RevenueCat and API keys that never reach the browser.

What we learned

The honest version of a product is usually harder to build, and more useful. Every shortcut I did not take is a reason someone can rely on it.

Small conveniences can carry big risks. Some of the most important decisions on this project were about what not to build.

Original sources are worth the extra time. Reading Common Data Sets one by one was slow, and it is the part of the app a scraper could not copy.

Removing things helped as much as adding them. Fewer sections and merged pages made the app easier to use.

What's next for Matricula

More hand-checked detail. Every college is already covered by federal data. Next, I want to add checked admissions factors, deadlines and requirements for more schools, so students get the same depth wherever they apply.

A tool for the whole family. College decisions are made together, and the app should make that easier than it does now.

An App Store release. Moving from the current test build to a public release.

More of the picture. Better career data outside STEM-heavy fields, and cost and scholarship information tied more closely to the matching.

Reaching the students who need it most. Families who pay for private admissions counseling already get this information. Every student should have it, and that is why I built Matricula this way.

Built With

Share this project:

Updates

Submission history