Who we build for
Clients and early ventures.
National Tax Credit Scholarship FundIn progress
A 501(c)(3) in Richmond, Virginia, and a participant in the Federal Scholarship Tax Credit program — it channels tax-credit eligible donations to public school students.
Technical implementation: we are building out the platform that carries donations from donor to school division.
Low-bono work and startups
No revenue for me, until you make revenue.
We know how thin the cash is when you are still building the thing. For early ventures we take the work on now and settle the money later — not the week you find your feet, but once you are running.
Built by the studio
Code SocraticFlagship product
You may know coding, but can you talk about it?
Interviews are a conversation, not a submit button. Code Socratic reads the code you actually wrote and asks you to explain it out loud — then pushes back on the answer.
solution.py
def solve(heights):
left, right = 0, len(heights) - 1
best = 0
while left < right:
width = right - left
best = max(best, width * min(heights[left], heights[right]))
# The shorter post caps this pair, and every pair still to come
# behind it is narrower — so it can never beat what we have.
if heights[left] <= heights[right]:
left += 1
else:
right -= 1
return best- Approach — complete
- Complexity — complete
- Code — in progress
hints 0
11:38
You
Two pointers, one at each end. Each step I move the shorter post inward.
Tutor
Why the shorter one? Say what you throw away when you move it.
You
Every pair that used that post. The width only shrinks from here, and that post already caps the height.
Tutor
Good. So the loop is O(n), one pass, no extra space — agreed. Write it.
You
Done. Both samples and all seven hidden tests pass.
Tutor
They do. Harder question, and it is the one an interviewer asks next: what happens on the step where the two posts are exactly equal, and why is it safe to move either?
Widest Water Between Posts
An array heights gives the height of a vertical post at each index. Choosing two posts i < j, the water they hold is (j - i) * min(heights[i], heights[j]).
Return the maximum water any pair of posts can hold. If fewer than two posts exist, return 0.
Example
heights = [1, 8, 6, 2, 5, 4, 8, 3, 7]
# -> 49 (posts 1 and 8: (8 - 1) * min(8, 7))Constraints
0 <= len(heights) <= 10^50 <= heights[k]values fit in 64-bit ints
test_solution.py
# Tests for "Widest Water Between Posts" — read-only. The harness owns this file.
# Hidden tests run too. Their inputs and expected outputs are not shown here,
# so passing everything below is not yet proof the solution is right.
from solution import solve
def test_sample_1():
assert solve([1, 2, 1]) == 2
def test_sample_2():
assert solve([4, 3]) == 3All green
- Sample tests
- 2 / 2
- Hidden tests
- 7 / 7
- Elapsed
- 84 ms
Hidden probes cover the wide container, a monotonic run, and the empty and single-post edges. Reference solutions and hidden outputs never leave the server.
A replica of the real workspace. The tabs work; nothing else here runs.
Coding was never single-player
Every turn goes both ways: you explain, it pushes back, you answer. Nothing here is graded by a submit button.
It remembers your code, then asks why
The tutor carries your actual solution through the session, so the question is never generic. It asks about the line you wrote, and why you chose it.
You don't have to be a coder yet
Ask what a line does and it will walk you through it. Learn how working code works, and why it was written that way, before you can write it.
- Hidden tests run server-side
- Difficulty-weighted score
- Your code carried through the session
Other Services
What we take on
AI & LLM product engineering
Agentic features that real users use in your domain.
Cloud & microservices
FinTech-grade backends that hold up under load and audit.
Full-stack product build
Zero-to-one, multi-tenant from day one.
Platform reliability
Releases that land predictably, and stay up after they do.
The through-line
Our Principles
Strategy is engineering
The people who scope it write it. No seam to drop.
One decision, two views
Business goals and code are the same call, not two teams.
You keep all of it
Tests, docs, runbook, you own it after handover. We end by making ourselves optional, and providing training on how to maintain it.
Process
How we work
Step 1, Discover
We write the ambiguity down until it's testable.
Step 2, Architect
A roadmap you approve before solution is written.
Step 3, Build
Staged, feature-flagged, tested - Iterative Development weekly for you to evaluate.
Step 4, Hand off
Docs, runbook, walkthrough, and training. Then we step back.
Who you work with
Right Now, One Person Team
Angeronia Labs is Pratik Kubal — five years of FinTech document-AI on AWS, a Master's in Machine Learning, and a habit of shipping under incomplete requirements.
When quality slips, we revive it. When the spec is fuzzy, we make it concrete.
First conversation
A problem that's easier to describe than to build?
That's the kind we like. Tell us what “done” looks like — we'll tell you the shape of the work.