Work / 01

Ardvarq
An AI advisor that helps students build a degree they actually finish.
Lead founder · Dec 2025 – Jun 2026 · CU Boulder
What it was
Ardi, a student-facing AI degree advisor. You talk to it about your degree, and it reads your real requirements, checks prerequisites, and builds a semester schedule that actually works. The students who stand to gain the most from a university are usually the last to find what is inside it, and I built Ardvarq to close that gap.
- 2,000+
- students in the pilot
- 506+ hrs
- of AI advising delivered
- $430
- total compute for the pilot
- $0.54
- compute per student
- 82.9%
- cache-hit ratio
- Solo
- sole engineer
How it started
Freshman year, first semester, I was a neuroscience major at CU Boulder. Before classes started I sat down with my academic advisor to build my schedule. Fifteen minutes. That was the window I got to plan the next four months of my life. She told me I needed a natural science elective, so she signed me up for astronomy. What she didn't tell me is that every neuroscience course already counts as a natural science. I didn't need that class. I got a C-. It's my worst grade in college by a mile.
If Ardvarq had existed, I'd have known in seconds I didn't need that class. An advisor with 300 students has, in theory, eight minutes per student a week. In reality you're lucky to get two 15-minute meetings a semester. So the students who walk in with the most outside guidance tend to do fine. The ones with none fall behind, or drop out, or finish with a degree that doesn't fit where they're trying to go.
I built Ardvarq because that's backwards. The students who need advising the most get the worst of the system. I wanted to hand the kind of institutional knowledge connected kids already have to the ones who don't have it. So I taught myself to build by talking to Claude, and I shipped it.
What it was actually like
Getting it off the groundBuilding it solo and getting the first real students on it.
I built almost all of it myself by talking to Claude. I'd never written a line of code. Over about two and a half months I worked roughly 100 hours a week and shipped 207,000 lines across 707 files. One five-day stretch was 281 AI-mediated turns. One session was 167 messages in eight hours. There were real low points in there. Someone found 86 console errors in one review and I had to throw out the whole regex pipeline. Then I found out the entire data layer was just local JSON with no database, so I migrated everything to Neon. I kept tightening the thing down to one promise. Build my next semester.
The deadline was hard because CU's next-year classes dropped March 4, so it had to be live with those classes or it was useless. We launched at CU Boulder on March 5. Twenty-one active users on day one, meaning they uploaded their audit and actually chatted with the bot a couple times. By March 10 people were coming back four or more times in three days. One student drove 28 referrals and 57 sign-ups by referral code in a single day. That part was unreal. We had no users and then close to 2,000. The whole pilot ran 44 days, no school partnership, zero ad spend, about $430 in compute total. The strange part is that the building was the easy part for me. Building gives me dopamine. Selling it later was the part that broke me.
Chasing CUHow I got into the room, and what happened once I was there.
I got the meeting because I cornered the CU system president at a Shabbat dinner. My rabbi introduced us, I showed up in a suit on March 27 and handed him a business card, and he forwarded my cold email to his assistant and convened the system leadership. That meeting could mandate adoption across all four CU campuses, 70,000-plus students. April 20 was my Super Bowl. We rehearsed it twice that morning, then pitched the president and two of his leadership. I led with 1,700 students, about 900 engaged, 56 hours of advising for $430 in compute. I framed it as a research partnership and not a SaaS contract. Honestly I didn't want their money, I wanted their logo and a system person on my board. It ended a little abruptly when one of them had to leave. We made it past the screening, and after that I started telling people CU was getting on paper. They weren't.
The high point came four days later. A thirty-minute meeting with the exploratory-studies advising office turned into two and a half hours. They pulled the director of campus advising in mid-meeting and started talking about a paid summer orientation pilot, five to ten grand for the month. One of them told me positive feedback is not a viable business, and she was right. Within a week the excitement turned into procurement talk, because the tool they already had reportedly took them fourteen months to adopt. And the head advisor went from enthusiastic to terrified for his job once he read the actual student transcripts. The line that stuck with me was an advisor asking why I couldn't have done this a year earlier, because then they'd never have signed with the incumbent. I took that as validation and it also kind of gutted me.
The wallsThe things that actually ended it.
CU already owned a planning tool. They'd signed a non-compete with that vendor, and I found out days before I launched. So I couldn't be the planning tool. I had to call myself an intelligence layer and route around the contract. Then on May 27, the CU registrar killed the campus-wide path for real. She walked me through public-institution procurement, the same RFP gauntlet that took three and a half years to adopt the tool they already had, and said her office had zero bandwidth until Fall 2027. That was the no that ended it.
The one that stuck with me longest was the student government. Late March, my ambassador team thought we were about to get officially endorsed by them the next day. They loved the tool. Then they voted against endorsing it, and somewhere in that they called me a monster. Not behind my back. To my face. I kept hitting this same thing all spring. Everybody praised it over and over, and almost none of it turned into a yes. I built something people loved that was misaligned from day one, and I kept reading enthusiasm as a purchase order because I wanted to.
The bench I somehow builtFour edtech heavyweights advising a 23-year-old with no track record.
In a few months I put together an advisory bench that still doesn't quite make sense to me. The CEO of a student-success company that sold for over a billion dollars and has about 850 schools paying it six and seven figures a year. The CEO of the exact planning competitor I was up against. A co-founder of one of the oldest names in the industry. The founder of another company in the space. I was 23. I'd shipped one 44-day pilot at one school. I had no engineering background and no real track record. One of those connections was family, so I'll be honest about that one. The rest came from cold asks, one introduction leading to the next.
It was less glamorous than it sounds. It was also the most useful thing I did. These people didn't flatter me. The competitor's CEO told me it took his company ten years to reach $10M in ARR, and that one number is what eventually broke my conviction. Another founder gave me an expletive-laced intervention. He told me to stop building and go run 50 buyer-discovery calls because I'd been chasing the wrong person the whole time. One advisor called my launch numbers a flash in the pan that was trivially replicable. Almost none of it was what I wanted to hear, and almost all of it turned out right. Getting these people in the room wasn't the hard part. The hard part was that I kept asking for their opinion after I'd already decided what I was going to do.
Knowing when to stopWinding the company down, and the two doors that opened.
On June 7, my co-founder and I sat down and said it out loud. The company we'd put six months into wasn't going to make it on its own. Not because students didn't want it, they did. The full why is in the closing at the bottom of this page. What I'll say here is what it felt like. My conviction had been sliding for weeks, and it finally broke on a single number. It had taken the biggest comparable company ten years to reach $10M in ARR. That was the moment I stopped arguing with it.
It didn't end in a hole. A couple of soft acquihire conversations opened up on the way out, off the advisory bench, and we haven't decided what to do with them. After the year I had, I'd rather sit with a real choice than keep building product so I never have to make a sales call.
What I took from it
I spent about six months building something students loved and nobody would buy. Here's what I actually walked away with. Each one cost me something, usually a wall I ran into headfirst, sometimes an advisor telling me what I should have already known.
Build for the buyer, not just the userThe student loved it. The student doesn't sign the check.
I built the whole thing for students. They loved it. Around 900 meaningfully engaged over a 44-day pilot, sessions running past thirty minutes, all of it on $430 of compute. None of that mattered, because the student doesn't pay. The registrar does. I love our consumer. The buyer made me want to die. An advisor put it simply: every higher-ed product feels bad because the buyer isn't the user, so you build to an RFP instead of for the person actually clicking around in the thing.
It cost me about six months. I built for half a year before I really knew who pays. The CU registrar walked me through a procurement gauntlet that took three and a half years for the tool they already had, and told me there was no bandwidth until Fall 2027. She's the person who actually mattered, and I'd spent months never talking to her. Another founder had to swear at me over the phone to get me to go run buyer-discovery interviews. He'd sold a million dollars of his own product on wireframes because he talked to the registrar first. Next time I find out who pays before I build the product they can't buy.
Enthusiasm is not a purchase orderNine interested contacts at CU, zero signatures.
Everybody loved it. Students, advisors, even student leaders. I had nine institutional contacts at CU Boulder and not one of them signed anything. The exploratory-studies meeting was the high point. A scheduled 30 minutes ran two and a half hours. They pulled the director of campus advising in mid-meeting and floated a paid summer pilot, priced at five to ten grand. The advisor running it also said the thing I should've heard louder. Positive feedback isn't a viable business. You have to get from "that's neat" to "the pain is bad enough that I'd actually pay."
I never made that jump. Within a week the same advisor flipped from excited to procurement talk. The head advisor there saw what students were typing into the tool and went from enthusiastic to scared for his own job. It happened the same way every time. Loved by the people who use it, stalled by the people who buy it. I read all that warmth as a yes. It wasn't.
Distribution beats productI had the better tool. I didn't have the distribution.
This one took me too long to get. We had a product students actually loved. 1,700 users in a 44-day CU pilot, about 900 meaningfully engaged, sessions over thirty minutes, no ad spend, no institutional partnership. One student drove 28 referrals and 57 sign-ups in a single day. None of it turned into a single institutional yes.
One advisor told me hacking distribution was the singular move, the only thing that mattered, and I heard it and went back to building anyway. Another said the same thing a different way. Inventing a better product is rarely what decides whether you win. In edtech especially, the company with distribution beats the company with the better tool almost every time. I had the better tool. I didn't have the distribution, and a product people love only feels like enough.
Conviction is a resourceIt runs out. Spend it well, and know when to redirect it.
I built Ardvarq for about six months. A hundred hours a week for most of it. That kind of build only happens if you believe the thing is going to work, and I did, hard. But my belief swung more than I'd like to admit. Early on my co-founder convinced us we could never beat the incumbent, so we quit. Then I was on a ski trip and went screw that, we're doing it. Later my conviction collapsed on a single number. It had taken the biggest comparable company ten years to reach $10M in ARR. That's all I had to hear.
Here's the part I'm less proud of. When sales stalled, my move was to build more product instead of selling harder. Building gives you dopamine. A cold registrar call is just rejection, and I kept choosing the dopamine. So I spent belief shipping code when the honest move was to find out who actually pays. By the time the registrar told us there was no bandwidth until Fall 2027, the campus path was already dead and I'd burned months I could've spent learning that earlier.
What I'd do differently isn't believe less. It's redirect sooner. Belief is fuel, and you can pour all of it into a product everyone loves and still end up with a buyer who can't buy.
How I actually built this
I built it by directing AI, mostly and a couple of other tools. I didn’t know any Python or C++ when I started. People hear that and think vibe coding, where you prompt something, it looks right, you ship it. That’s not what this was.
It’s a Claude wrapper, sure. The model writes the code. But a wrapper that 2,000 students lean on has to be cheap to run, hard to break, and quick enough that someone will actually sit and wait for it. That’s the real work, and none of it is the AI writing a function. It’s the part I’d want you to look at.
- ~207K
- lines of TypeScript / React
- 51
- API routes
- 2
- Postgres databases, 16 migrations
- ~2.5 mo
- zero to a finished pilot, 2,000 users
- 1
- engineer (me), directing the AI
- 0
- lines of Python or C++ I knew going in
I shipped fast, then rebuilt it
V1 was the MVP, and it was never meant to stick around. I built it fast on a static-JSON backend with almost everything running in the browser, because the only thing that mattered was getting a real tool in front of students before registration opened. That version carried the pilot, 2,000 students start to finish.
The day students started using it, I started building V2. We were in talks with CU Boulder about making the tool official, and I knew that for that to go anywhere it had to actually be good, not a demo held together with tape. The data layer was the weak point, so that’s what V2 rebuilt, underneath the same interface students already liked. It shipped near the end of registration season, before the incoming freshmen would hit it at orientation. The whole thing, V1 through V2, was about two and a half months.
Data layer
V1Course data as un-indexed JSON files.
V2Normalized, indexed Postgres on Drizzle. V1's failures traced to JSON blowing out the model's context window; the indexed database shrank that context by roughly 95%.
Persistence
V1The plan lived in the browser only.
V2Durable per-student plan and chat in the database as the cross-device source of truth. Your work survives and resumes on any device.
Scope
V1A four-school config (CU, Maryland, Illinois, Georgia Tech).
V2Just CU Boulder. I'd rather do one school properly than four halfway.
Live data
V1A static course catalog.
V2Live section and seat availability pulled from the registrar, timestamped so the AI can quote how fresh it is.
Audit intake
V1Every upload parsed by the model.
V2Self-certifying intake that reconciles totals and skips the model when they match: 81 seconds down to under half a second.
Integrity
V1Checked by hand.
V266 automated data-integrity checks on every build (64 pass, 0 fail).
The product
V1A dashboard with side-doors.
V2A single-product, pay-first spine with GDPR hard-delete and a full brand pass, and ~33,000 lines of dead code removed.
V1 proved students would use it. V2 is the one I’d hand someone without making excuses for it.
The hard parts
None of this is the AI writing code. It’s the stuff that only breaks once real students are in it. Open any of them.
The cost problem (the part I'm proudest of)The pilot ran 500+ hours of AI advising on $430 of compute.
Every message to Ardi sends 50,000 to 70,000 tokens up front, and a long conversation runs past 200,000. Done the naive way, the pilot’s thousand-plus conversations would have cost around $1,737 just in input. They cost $430.
The system prompt is one big 110KB file, ordered from the parts that never change down to the parts that change every turn. I cache it in four layers.
1. The identity layer
Ardi’s personality and CU’s rules, about 19,000 tokens. Cached once and read by every CU student. A CS major and a finance major hit the exact same block, and after the first request it costs a tenth as much.
2. The major layer
Each major’s four-year plan and course list, 20,000 to 37,000 tokens, cached per major. Every CS sophomore shares it. It’s a second cache point, separate from the first, and it’s the one almost everyone forgets.
3. The conversation layer
Inside one conversation, the history caches turn to turn, so each new message only pays full price for the new words.
4. The server layer
A cache I run myself holds the filtered course list, so the server isn’t re-sorting 9,000 courses on every request. When someone says “protect my GPA,” it re-sorts that cached list instead of building it again.
82.9% of tokens came back from cache, and that held between 83 and 86% no matter how long the conversation got. Caching the major layer on its own, instead of stopping at one breakpoint, saved about $669 by itself. End to end it was 54 cents of compute per student, somewhere between 10 and 50 times cheaper than Chegg, Khanmigo, or Duolingo Max.
None of this is a clever prompt. It’s knowing where the model stops charging full price, and putting the expensive stuff above that line and the stuff that changes below it.
The audit parser, 55% to under a secondThe thing that fought me longest, fixed in three steps.
Everything hangs on reading a student’s degree audit right, and this one fought me the longest.
- The first version was pure regex and topped out around 55%. Half the students would have gotten a wrong plan. Dead end.
- Handing the PDF straight to a model got it most of the way. A single-pass Claude parser hit 100% across 300 real audits.
- Then the actual fix: have the parser add up what it read and check it against the totals printed on the audit. If they match, don’t call the model at all. That dropped a parse from 81 seconds to under half a second, 21 of 21 test files clean.
The fastest, cheapest version turned out to be the one that doesn’t touch the AI. Figuring out when not to call it was the whole game.
The data layer underneath itIndexed Postgres over raw JSON cut the AI's context ~95%.
Every early failure in V1 came back to the same thing. The course data sat in raw JSON, and loading it blew out the model’s context window, which made everything slow and expensive. Putting it in an indexed Postgres database cut what the AI had to carry by about 95%, and the prompt only loads the ~200 courses that matter to a given student instead of all 9,429.
Under that is an ETL pipeline over 9,429 courses, 84 majors, and around 11,000 instructors, with 25 years of grades and reviews, all normalized into a real schema. A script runs 66 integrity checks on every build, 64 passing right now and none failing. Prereq chains resolve at about 94%, and since there were two different formats for them, I wrote a converter that moves between the two without breaking.
Where I don't let the AI decideA plain engine checks every plan the model hands back.
The AI suggests a schedule. It doesn’t get to call it valid. A plain, deterministic engine resolves the plan in five passes and then checks it against hard rules: prereqs in the right order, credit limits, and one number that can never be wrong, earned plus in-progress plus remaining always has to equal what the degree needs.
If more than 30% of the model’s plan fails those checks, I throw it out and fall back to a plain solver, then to a template. I tested all of it against nine real student audits and kept them as the test set. The model can be wrong. The engine is what tells a student their plan actually holds.
I had to babysit my own AI agentsAfter one wrecked the project, I built guardrails it can't ignore.
This is the first thing I’d point to if someone called it vibe coding. On June 7, mid-campaign, one of my own subagents ran a git command that dumped 224 quarantined files back into the project. The agents I had checking the work then reviewed the wrong version and told me it was fine. I caught it myself, by hand.
The lesson, straight out of Anthropic’s own writing: you contain this stuff at the environment first, then steer the model second. An instruction in a doc can be ignored by an agent. A hard block can’t.
So I built the block. A pre-run hook and a set of deny rules kill the dangerous git commands for every agent before they run, and any agents touching files at the same time get forced into separate worktrees so they can’t step on each other. Someone audited the setup later and graded it exemplary. Building a safety harness around the AI that builds your product isn’t something a vibe coder thinks to do.
What I'll tell you is still brokenI paid to have my own code torn apart so I'd know.
I had someone run a 14-part forensic audit of my own codebase, just to find what was wrong with it. It found real things. The tool Ardi calls most often was failing 64% of the time. A couple of files had turned into god-objects doing way too much. An old config file had a live API key sitting in it that needed rotating.
I’m telling you that on purpose. A vibe coder ships when it looks right and never looks again. I can tell you the exact failure rate of my worst component. That’s the difference.
What the data showed
One thing fell out of the pilot data that I didn’t expect, and didn’t fully get to keep.
The GPA inversion, and why I stopped bragging about itThe students who used Ardi the most had the lowest GPAs.
The students who used Ardi the most sat at a 3.25 GPA and below, not the 3.4-and-up crowd. Which is the whole point of a tool like this. The students who need advising most are usually the ones who never walk into an advisor’s office, and they were the ones living in it.
Then someone I trust looked at the data and told me I couldn’t call it an equity win, because I had exactly one first-generation student in my survey data and no real demographic info at all. He was right. So I stopped pitching it as proof and added first-gen, Pell, and transfer questions to signup, so the next pilot could actually answer the question instead of hinting at it.
The finding I'm not proud ofThe tool was blind to students who were struggling.
The same data showed Ardi couldn’t see students in trouble. 22 of them showed clear signs of distress across their conversations. The number of times the tool offered to put them in front of a real person was zero, because I never built that. You only catch something like that by sitting down and reading what actually happened. It’s at the top of the list for whatever comes next.
The assumption we never tested
We ran all of Ardvarq on one rule: test every assumption. We tested whether students would like the tool obsessively, and we built exactly what they wanted. The one assumption we never tested was the biggest one, and we made it on day one. If students love it, universities will buy it.
That was actually two leaps, and both were wrong. Students wanting a tool doesn’t mean a university wants it. And the part I didn’t see coming: a university wanting it doesn’t mean it can buy it, at least not on a timeline a startup can survive. We had basically everyone at CU loving the thing, naming use cases I hadn’t thought of, and it still ended with the IT department saying the soonest they could move was Fall 2027.
So we really ran two go-to-markets. A big one aimed at students and a small one aimed at the university. Almost everything went into the student side, below. The university side stayed small on purpose, once it was clear the sales cycle was measured in years and all that student love wasn’t going to shorten it. Open any channel to see what it actually involved.
The student side, run on $0
An ambassador program~22 student ambassadors, pointed at dorms instead of classrooms.
- Rolling onboarding twice a week, each ambassador aiming for ~100 sign-ups in 10 days (about 10 a day), knocking dorms rather than presenting in classes.
- The ask on the deck: “Drive 100 verified student sign-ups per ambassador by spring break. Help Ardvarq reach 20% of CU Boulder.”
- Started with 22, about 9 stayed to the end, roughly 4 really produced. One ambassador flyered all of Libby Hall in about an hour.
- I kept it strictly performance-based and never promised anyone a job individually. In their exit interviews the ambassadors named the missing piece themselves: no competition or incentive structure, no clear advancement bar.
- The whole program traced back to my own freshman advising session. Fifteen minutes, an advisor signed me up for astronomy as a “natural science” when every neuroscience course already counted, and I got a C-, my worst grade in college.
Tabling with a live demoA screen showing a student their own degree, not flyers on a table.
The rule we landed on: tabling only works with a product demo, not flyer hand-outs. We set up where academic anxiety concentrates and showed students their actual degree on the spot. In every exit interview the ambassadors ranked this the single biggest growth channel and the thing that made them believe in the product, and it converted hardest with freshmen and anyone who had never seen the tool before.
A 9-day flyering blitzQR flyers across campus, timed to the registration panic window.
- A non-stop 9-day schedule including a “storm Willville” dorm event. ~1,200 flyers printed, ~200 QR codes scanned.
- The highest-converting combo named the deadline and the payoff: “Registration opens next week. Are you ready?” over “Upload your degree audit. Get your plan in minutes.”
- Other lines we tested: “1,000 students. 0 dollars. 2 minutes.” · “Your advisor has 8 minutes a week for you.” · “Built by a CU student who got screwed by bad advising.” Footer on all of them: “Built by CU students, for CU students.”
Classroom blackboardsWriting the pitch on lecture-hall boards before class.
Before lectures, we’d write the pitch straight onto the classroom boards, so students read it in the few quiet minutes before the professor walked in. It cost nothing and put the name in front of a full room right when they were thinking about classes. I never tracked what it converted. It was an awareness play, not a funnel.
Instagram DMs to incoming freshmenReaching the class of 2030 before they set foot on campus.
We went straight to incoming CU freshmen in the DMs, before orientation, carrying referral and ambassador codes. It became the backbone of the late direct-to-student push, alongside an email blast to ~600 real prior users and a paid product live on the site.
Founder-led LinkedInFrom ~0.3% to ~40% of profile views; a post cleared 100K engagements.
LinkedIn was something like 95% of my networking success. I took my profile from roughly 0.3% to 40% of profile views, ended up averaging 7 to 8 new connections per call, and had one post clear 100K engagements. It is how I assembled the advisory bench and got into institutional rooms I had no business being in yet.
Mass professor email, done legallyThrough CU's own approved vendor, after a real security review.
Instead of scraping and blasting, I worked through CU’s IT and data-security review (eight or nine back-and-forths) to send to ~140 professors through the school’s own approved vendor, fully above board. The same push added five HBCUs to the list: Howard, Florida A&M, Clark Atlanta, Alabama A&M, and Tennessee State.
What it produced
2,000+ students used Ardvarq in a single registration cycle, with no institutional support and no marketing budget. Student government even endorsed it for a minute. As far as we could tell, no unlicensed, unendorsed tool had ever piloted at a university and pulled numbers like that.
What 2,000 students actually didThe usage behind the headline number.
- 2,000+ students used it across the registration window, with no institutional support behind it.
- Around 900 of them had real back-and-forth conversations with Ardi, not just a single look.
- 506+ hours of one-on-one advising delivered, for $430 of compute.
What I learned
The big-picture lesson, that distribution beats product, sits in the Founder tab. These are the tactical pieces underneath it, the specific things that moved people when I had to get 2,000 of them onto a tool nobody had heard of, for free.
Timing was the biggest leverNobody goes looking for a degree tool until the clock is on them.
The same flyer or table converted far better in the days right before registration than two weeks out. The highest-converting line we ran just named the deadline: “Registration opens next week. Are you ready?” People don’t go hunting for a planning tool until they’re panicking, so I stopped spreading effort evenly and threw everything into that window.
A demo beats a flyerA screen showing your own degree did what paper couldn't.
Tabling with an actual screen, showing a student their own degree on the spot, was the single biggest channel, and the ambassadors said so in every exit interview. A flyer sitting on a table did almost nothing. A flyer plus someone turning the laptop around and showing you the tool did a lot. We set up where the anxiety was, outside advising offices and in the dorms, not where the foot traffic was.
The ambassador program needed teeth22 started, 9 stayed, about 4 actually produced.
I kept the program loose on purpose, because I never wanted to dangle a job offer I couldn’t promise. That was a mistake. In their own exit interviews the ambassadors told me the problem plainly: no competition, no incentives, no clear bar to hit. 22 started, about 9 stayed, maybe 4 really moved the needle. A simple benchmark, like a gift card at 100 sign-ups, would have gotten a lot more out of the same people.
Free distribution isn't freeIt costs founder energy instead of dollars.
None of this cost money. All of it cost me. The channels that actually scaled were the ones I ran hardest myself, especially LinkedIn, which only worked because I posted on it relentlessly for months. Zero-budget distribution runs on your own energy, and that runs out faster than you think.
How it ended
We closed it on purpose.
The product worked. Students loved it. That was never the problem. The problem was the buyer. A university buys on a multi-year RFP cycle, and the soonest CU could move was Fall 2027. You can’t keep a startup alive across a two-year sales cycle with no revenue, and venture money doesn’t fix that, it just starts a faster clock. So on June 7 my co-founder and I decided to wind the standalone company down. Not because it failed with students, but because the math on a standalone business didn’t work.
Why we closed it
- The buyer moves on a multi-year procurement cycle. The soonest CU's IT could move was Fall 2027.
- A sales cycle that long can't survive on venture money with no revenue. We'd already stopped raising for exactly that reason.
- The biggest comparable company took ten years to reach $10M in ARR. The math on a standalone business didn't justify the next few years.
- Student love was real and changed none of it. What students want and what a university can actually buy are two different products on two different clocks.
How we closed it for value
- Soft acquihire conversations that came out of our advisory bench, where we were pitched as AI-native builders to major edtech companies' AI innovation teams. Those are still open.
- We kept the IP. Everything we built is still ours to take into whatever's next.
- The real prize anyway: two people who shipped an AI product 2,000 students used and now know exactly how this market works.
I’d rather end something clean and walk out with the lessons and the relationships intact than ride a dead company into the ground because quitting feels like losing.