Native type, comfortable density and one idea per screen, written as a spec and rolled out across every tab at once.
359 commits in one redesignI'm a finance student at Trinity University, graduating May 2027. I run Lone Pine, an Amazon resale business that did over $1M in sales in the last 12 months on an operations platform I built, and I co-founded Mass Apply AI, a desktop app in private alpha that fills in job applications for you. Claude writes most of the code; I decide what gets built and check it against the numbers.

My Amazon business and the operations platform it runs on.
A desktop app that finds jobs and fills the applications. You press Submit.

School, calendar and training in one ranked list, planned into my week, with a lock-screen widget.
Training, class and sleep scheduled to the minute, checked by a build script.
A personal AI memory system, measured on a public benchmark.
My Amazon business, and the operations platform I built to run it.
The real app with sample data. Flip through the screens, or choose Try it live to open orders, trace a unit and build a claim packet.

The start-of-day page: what needs attention, ranked, with the week in five numbers underneath.
Sep 2026 (through the 27th) · ~$113k sales · ~$17.7k net profit
Figures come from the platform's own P&L, which counts real unit costs, Amazon fees and overhead. Rounded on purpose. Sales data in the platform starts February 2025; 3,500+ purchase orders from 200+ suppliers since then.
Lone Pine buys products from retailers and resells them on Amazon. It first ran on Airtable. I replaced that with a Next.js and Postgres app covering purchasing, inventory, reimbursements and accounting, and moved all 2,671 purchase orders on file at the time, with nothing missing.
The rule behind every screen: show the real number, or show nothing. Every unit gets a code when it's bought and is tracked until it sells. Every card charge is matched to a purchase order, or the app says in plain English why it couldn't be. Claim packets that took about 110 minutes a week to put together by hand now build in one click.
In September I redesigned the whole app to feel like a native Apple app. The brief came from real usage: in one month our sourcing VA created 324 purchase orders and pasted 122 tracking numbers, about 40 edits a day on one screen, and the team missed how instant Airtable felt. So it had to be at least that fast. Cold load on the main tab went from 23.2 s to 4.8 s, and first-load JavaScript fell by 60%.
The demo uses sample data. Suppliers and staff stay private.
I own the business and wrote the platform. Our two VAs, one on sourcing and one on reimbursements, shaped it with daily feedback.
Co-founded the company and built the desktop app, which ships as Minsky. Private alpha since Sep 6.
The real app with sample data. Flip through the screens, or choose Try it live to run an application and answer the question it parks for you.

Every opening from a sweep, ranked against your profile. Auto-Apply where there is an adapter, Fill manually where there isn’t.
Mass Apply AI finds openings across thousands of company career sites, ranks each one against your profile, and fills in the application. It never presses Submit. When a form asks something only you can answer, like relocation or salary, it leaves the field blank, asks you once, and reuses the answer on every form after that.
Coverage was the hardest part: a hidden bottleneck skipped about 1,300 job boards on a typical run, and fixing it made each sweep return five times as many roles. The full story is in Notes.
The screens are the shipping app rendered in a browser with sample data: fictional employers and a fictional applicant. “Try it live” uses public postings from a real feed capture, simplified.
Built with my co-founders Jasper Buntinx (web and funnel) and Diego Prozzi (growth). I wrote the desktop app. About 2,100 of the 2,971 job boards came from Jasper’s board list.
Neidorff School of Business · Bachelor of Business, Economics and Finance · San Antonio, TX
National Hispanic Recognition Program · AP Scholar
Equity Valuation · Principles of Investing · Real Estate and Alternative Investments · Corporate Finance · FINRA Securities Industry Essentials
Financial Accounting · Intermediate Accounting I · Intermediate Accounting II
Advanced Spreadsheet Modeling · Statistics for Business and Economics · Business Law · Business Management · Operations Management
San Antonio FPA · Chess Club · ModernGuild · Youth on Course Golf · Trinity Men's Soccer Club · Armadillo Bouldering
Built my own command center: school, calendar and training in one ranked list.
The real app, running on its built-in demo courses. Choose Try it live to check items off and watch the lock-screen widget update.

The week, planned automatically: every deadline split into blocks under a daily cap.
Ranked by urgency on the server, so the phone only draws the top few rows. Sample items.
Taska pulls in Canvas assignments, calendar events, GitHub and my training plan, turns deadlines into a week of work blocks under a daily cap, and serves the top of the list to a lock-screen widget on my phone. It's a single Node file with no dependencies, plus an MCP server so Claude can read and update my to-dos directly.
The first version could hang for over a minute waiting on one slow source. Now every source gets its own deadline and a ten-minute cache: a cold load takes 2 seconds and a warm one 12 ms. It started life as "Canvas Planner", which is still the name in its sidebar.
Screens use the app's demo mode, with sample courses. My real classes and accounts stay private.
A training plan with every minute of every day accounted for.
The real site, one Saturday in the peak week. Choose Try it live and pick any block: each day has to add up to exactly 1,440 minutes or the build fails.

One day, start to finish: a long ride, the run off the bike, meals, rest and sleep.
I set out to train for my first half-IRONMAN (a 1.2-mile swim, 56-mile bike and 13.1-mile run), aimed at Waco in October, on top of a full course load and a business. There's no slack in that week, so I treated the plan like software: one data file, and a Python build that fails unless every day covers exactly 1,440 minutes. It publishes a five-page site, a 141-event calendar feed and a 5:45 morning push to my phone.
The swim got dates instead of opinions: miss the 1,500-yard checkpoint and the plan defers to a spring race rather than force it. In the end I didn't register for Waco, so the plan rolls forward to a spring race, and the build recomputes every date.
Screens are from the real site with nutrition targets and locations removed. “Try it live” is a sample week.
A personal AI memory system, tested the way researchers test them.
Step through how a memory gets from my day into an answer.
Notes, decisions and people live as plain markdown files in one vault. No database to lose.
Scheduled jobs write a daily and weekly summary, so recent context is always condensed.
A router reads each question and picks how the retrieved memories are laid out for it, instead of one format for everything. It still misroutes most questions that span many chats (right on 5 of 25).
A custom MCP server lets Claude search the vault directly, from any chat.
A public benchmark for long-term memory in chat assistants. The full run cost $4.30 of a $5 budget. The router helped most on preferences and changed facts, and made date questions worse.
I wanted Claude to remember my work across weeks, not just within one chat. JARVIS is a second brain in plain markdown, summarized every day by scheduled jobs and searchable through an MCP server I wrote.
The interesting part was proving it worked. I ran it on LongMemEval, a public benchmark, added a router that picks a strategy per question, and measured the gain on a strict budget. I wrote down what would count as success before the run, and 0.767 landed in the middle band: the router works, just less than I'd hoped.
Then I looked at where the remaining misses come from, by comparing against a run that is handed exactly the right memories. About 62% of that gap is in reading the answer, not finding it, so better search alone won't close it.
Native type, comfortable density and one idea per screen, written as a spec and rolled out across every tab at once.
359 commits in one redesignEvery morning, three read-only agents go through Slack, the database and Amazon's API changes, and write one short, ranked recap.
3 agents · read-only · dailyOne agent per lecture deck turns a module into a quiz-review site, and every number in it is recomputed in Python before I trust it.
7 lectures · 1 modulePriced NFL season-long player props against the market. The honest finding: it's nearly efficient.
1,318 props · 282 playersTwo years of card transactions pulled in through Plaid and matched to suppliers, each match with a written reason.
4,712 transactionsA tab-by-tab review of the Lone Pine app, with every finding re-measured before anything was built on it. The worst find: a data feed that had been dead for weeks while its job kept reporting success.
82 findingsMass Apply AI sweeps thousands of company career pages every day. The feed felt thin, but nothing was failing loudly. The logs said the sweep finished. The app showed jobs. Everything looked fine.
So I stopped reading the code and started counting. On one sweep, 1,303 of 1,491 board failures weren't failures at all. Those boards had never been tried.
The cause was a circuit breaker, the kind of safety switch that stops you from hammering a server that's struggling. Mine tracked failures per web address. But every Greenhouse board lives at the same address, and so does every Lever board and every Ashby board. Three slow employers were enough to switch off an entire platform for the rest of the run.
The fix was small: a higher threshold, a 30-second retry probe, and dropping about 1.3 GB of page data per sweep that the app didn’t need. The bigger change was a tool that measures what a user would actually see, so the next silent failure shows up as a number.
What I took from it: a job that runs once a day never shows you the part it keeps skipping. If you don't measure coverage directly, you are trusting the absence of errors, and that isn't the same thing as success.
When I started building Lone Pine's platform, I wrote one rule at the top of the project: show the real number or show nothing. A confident wrong number is worse than a blank, because people act on it.
That rule shaped the hardest part of the system. Amazon tells you a product sold. It never tells you which unit sold. The easy answer is first-in, first-out. But then a unit lost in a warehouse gets quietly matched to a sale on paper, and your profit looks better than it is.
Instead, every unit gets a code with its real cost frozen when we buy it. A sale can only use up a unit that evidence shows actually reached Amazon. The first run traced 36,923 units in 34 seconds. Sales it can't attribute are counted and shown, not guessed.
The same rule applies to profit. When a product's cost was never entered, those sales are left out of profit instead of estimated. It means the dashboard slightly understates what we make. I'm fine with that. An understated number I can trust is worth more to me than a flattering one I have to double-check.
Claude writes most of my code. That makes my job less about typing and more about judgment: deciding what to build, and knowing when something is actually done. Four habits made the difference.
Measure what the user sees. Twice, reading the code convinced us that a style was broken. Twice, measuring it in a real browser proved otherwise. Now any claim about the interface gets measured before anyone acts on it.
Split the work. Independent pieces run in parallel on separate branches, then merge only once each one stands on its own. That's how seven page redesigns landed in a single day.
Look for what’s wrong on purpose. Before one release, I had a separate agent review the build with a single question: where could this app answer wrongly for someone? It found seven answers the app would have filled in incorrectly on real job applications. The release waited until all seven were fixed.
Own the misses. I once shipped a link "fix" I had only checked with a command-line request. In a real browser it broke embedded job boards. I reverted it, wrote a migration to repair the damage, and led the next release notes with the correction. The lesson is now a rule: check it the way the user will.
Internships and full-time roles in product or finance, or a problem worth solving. I read everything.