Multi-state CE and PDH compliance, computed. Live: https://android-tipster.github.io/licensefit/
Every continuing-education tracker on the market logs your hours. LicenseFit evaluates them: it takes one pile of activities and asks each licence's rulebook, separately, which of those hours that board will actually accept.
That is the job professionals with reciprocity currently do by hand. In their own words:
"You'll need multiple templates if you have reciprocity anywhere, due to the different credit requirements and staggered reporting periods. It can get complicated." (architect)
"I used an Excel sheet for years to keep track of licence number, renewal dates, PDH requirements. After a while though, this became so unwieldy because of all the overlapping dates and PDH requirements." (professional engineer, 20+ states)
"The tricky part isn't so much the hours, it's the timing of when you take the courses so they fit in the timeframe they need to be in." (architect)
"None of your CEUs count during this first partial year. They act like it's a gift that you don't have to worry about those yet. But they also won't accept them." (speech-language pathologist)
For every licence, against its own rulebook, for the reporting period you are in:
- Window eligibility. Hours earned before the licence was issued, or outside the reporting period, are refused with the reason named.
- Initial partial period. Some boards reject everything in the stub period before your first full cycle. Turn that on and the engine tells you an hour is worth nothing before you pay for it.
- Subject floors. A minimum inside the total, not an addition to it. Carryover can satisfy the total but never a subject floor, which a plain hours count gets wrong.
- Delivery-format caps. "At most 12 self-study hours." Caps fill chronologically, so a later course is cut to the remaining headroom and credited pro rata across its subjects, with the parts summing to exactly the credited total.
- Approved-provider rules. An activity only counts if it carries the token that board demands.
- Carryover. Clamped on the way in and on the way out, with surplus above the ceiling reported as wasted rather than silently dropped.
- Prior-period lookback. A period that closed short does not stop mattering because the calendar rolled over. Boards audit the period you already finished.
Then, across the whole portfolio:
- Dead hours. Hours you sat through that no licence in your portfolio accepted.
- The coverage matrix. Which hours landed where, and why the rest did not.
- What to book next. The single course profile that closes the most gaps at once, ranked so that subject minimums (which nothing else can substitute for) come before general hours.
State boards change their requirements on their own schedule and no vendor keeps 50 jurisdictions across 20 professions current. So the engine is the product and the rulebook is yours to edit, with the board's own wording pasted into the notes field.
The bundled rulebooks are patterns, named for their shape, every one marked
verified: false. They exist so you can see how each rule type is expressed and fork the
closest one. Check your board's current published rule before you trust a number.
100% client-side. No account, no server, no analytics, no network calls of any kind. Licence
numbers and completion records never leave the machine. The built page is a single
self-contained HTML file that works offline over file://.
| Free | Pro, $29 once | |
|---|---|---|
| Licences | 2 | unlimited |
| Full evaluation, every verdict and reason | yes | yes |
| Dead-hours headline | yes | yes |
| "What to book next" planner | locked count | yes |
| Coverage matrix | no | yes |
| CSV import and export | no | yes |
| Printable compliance report | no | yes |
| Backup file | no | yes |
Keys validate offline with a checksum. There is no licence server to go down and nothing to renew.
node test/test.mjs # 169 assertions
node build.mjs # writes the self-contained docs/index.htmlsrc/ is zero-dependency ES modules shared between Node and the browser. build.mjs flattens
them into one script and fails loudly on a top-level name collision.
LicenseFit is arithmetic, not legal or licensing advice. It computes what the rulebook you entered implies about the activities you entered. Your board's current published requirement is the only authority.
MIT licensed.