Skip to content
Franklin Martinez

I build AI that knows when it's unsure.

AI Engineer, Dominican Republic.

justask is my open-source library. Type a request and it fills the form, leaving blank anything it isn't sure of. Pick a request to see it work.

New expense

“lunch with Larkspur yesterday, $86.40”

Vendor

Larkspur Catering

0.99 gate 0.70
Tags

Meals

0.86 gate 0.40
Date

Sat, Oct 10, 2026 “yesterday”

0.98 gate 0.80
Amount

$86.40 “$86.40”

1.00 gate 0.90

New expense

“lunch with the cleaners yesterday, $40”

Vendor

Left empty for you

0.17 gate 0.70

No vendor is named. Best vendor guess: Larkspur Catering at 0.17.

Tags

Meals

0.95 gate 0.40
Date

Sat, Oct 10, 2026 “yesterday”

0.98 gate 0.80
Amount

$40.00 “$40”

1.00 gate 0.90

New expense

“Farwander taxi with a client on Friday, $64”

Vendor

Farwander Travel

0.81 gate 0.70
Tags

Travel

0.70 gate 0.40

Client

0.86 gate 0.40
Date

Fri, Oct 9, 2026 “Friday”

0.99 gate 0.80
Amount

$64.00 “$64”

1.00 gate 0.90

Pick a request

Try it live
Fig. 1. Three requests sent to the live demo on October 11, 2026, replayed with their real responses. Bars are the model's probability for each pick; a pick below its gate leaves the field empty.

Open source

justask

Turns what a person types into an app's own state: a search result, a table filter, a filled record card. Code finds the candidates, a model picks one label per question with a probability for every label, and a field it isn't sure of stays empty for the person to fill (Fig. 1).

docmatch

Invoice reconciliation for accounts payable. A vision model reads the invoice, deterministic code checks what it read and matches it against the purchase order and the receiving record, and anything that doesn't add up goes to a person (Fig. 2). The deep dive has the benchmark behind every stage.

In progress: extraction, matching, entity resolution and the review pipeline are done.

See Fig. 2 run: an invoice checked step by step

Extract

Gate

  1. received
  2. extracted
  3. validated
  4. resolved
  5. matched
  6. approved | needs_review

Next: resolve each line to the catalog, then match the invoice against its purchase order and receiving record.

Fig. 2. A synthetic invoice from docmatch's CI corpus, with its labeled fields drawn where they sit on the page, then the gate's two rules. The gate needs no model and no label. A reading that fails is kept and never retried, because retrying would shop for a passing answer.

dgii-ts

A TypeScript library for the DGII, the Dominican tax authority. It validates RNC, cédula, NCF and e-NCF numbers offline, and looks up taxpayers by scraping DGII's web pages with retries and a circuit breaker, because DGII has no public API and shut down its SOAP service in January 2025. Fig. 3, below, is the library itself, running in this page.

It ships an agent skill, so coding agents learn the library with one command: npx skills add franklinmdev/dgii-ts --skill dgii-ts

See Fig. 3 run: check an RNC or a cédula yourself
Digit430587125
× Weight79865432
Product2827030402834
Sum 160160 mod 11 = 6Check digit: expected 5, got 5

RNC: digits 1 to 8 times weights 7, 9, 8, 6, 5, 4, 3, 2. The remainder of the sum over 11 gives the check digit.

validateRnc("430587125"){valid: true, formatted: "4-30-58712-5"}

Valid

Fig. 3. dgii-ts 0.3.0 from npm, imported by this page. The steps show the check-digit arithmetic; the verdict is the library's own. The example numbers are invented.

In development

DomiProp

Rental management for Dominican landlords: expense tracking, the monthly 606 purchase report, lease contracts under Ley 85-25, and reminders before tax deadlines. Built with Next.js, NestJS, Prisma and PostgreSQL. Pre-launch.

Fig. 4. The DomiProp dashboard.

brook

A mobile app in development (Expo, TypeScript) that turns the links people save from TikTok, Instagram and the web into a searchable library, each link sorted into typed fields with a confidence badge.

Experience

Full-Stack AI Engineer

Nubeteck, S.R.L., February 2026 to now

I own a commercial financial-management platform end to end, from the data model to the frontend, and take on the harder integrations, such as payment providers. I also lead the team's adoption of AI coding tools and mentor our interns and junior developers.

Software Developer

Nubeteck, S.R.L., April 2023 to February 2026

I helped build a shared design system used across the company's products, tuned the data layers so the interface felt faster, and mentored junior developers.

How I work

Rules before results. When a model makes a decision in something I build, I write down how it will be judged before the first call: a frozen eval set, pass lines, a gate that is measured rather than guessed. Failed rounds stay in the record.

From a brief to a shipped product. Research and a plan go in, and a working product with a QA guide comes out: the data model, the API, and an interface that people without a technical background can use.

Quality enforced by the tooling. Every repo carries written rules and edit hooks, so each change typechecks, lints and validates its schema before it lands. Deep models plan, fast models execute, and the same rules hold both.

About

Most of what I build deals with messy real-world rules, like taxes, compliance and internal operations, where getting the small details right matters more than the stack.

Outside work. I play basketball and run Arkhelon, a YouTube channel about myths and legendary history.

Contact

I reply within a day or two.