RMFU Desk

Two surfaces, one product story

This marketing host answers SEO and prospects. The tenant desk holds IAM, workspaces, and your artifacts. They share design language — not databases.

335Python files
63route modules
60palette rows
CDN / TLS · /api/ready
Session · Firebase / password · Bearer
Tenant routes · Academy · Companies · Risk
SQLite / Postgres · IAM · Ledger hooks

Security posture (plain language)

Identity

HTML flows use signed sessions; APIs accept verified Bearer tokens. Same user, two transport idioms.

Public JSON

Marketing demos and health checks are allowlisted. Arbitrary /api/* stays behind the gate.

Ops

Deploy hooks watch /api/ready; super-admins can unlock full readiness JSON for runbooks.

Extensibility contract

LayerRule
ToolsPrefer GET-query tools so URLs stay shareable and audit-friendly.
Marketing APIWhitelist tool IDs + cap payload size + per-IP rate limits.
NavigationNew labs ship as routes — the command palette indexes discoverability.

Three-minute mental model

RMFU is one surface for reading (brief + pulse), remembering (library + drills), and stress-testing (risk, macro, scenarios). Sign in to reach your tenant desk; this public site is the story, not the datastore.

Open the full guided tour → (recommended instead of this short blurb).

Use Open desk when you already have access — you will authenticate at the gate like any other protected route.

Sign in

Live calculators vs. marketing

After sign-in, /tools hosts shareable one-page calculators (NPV, payback, Kelly, and more). This public tools hub explains what exists for crawlers and prospects.

Open desk

Why drills matter

Bookmarks decay. RMFU uses short, spaced repetitions so vocabulary and frameworks stay retrievable when you are in front of a committee or a live tape — not only when you are reading alone.

Nudge inputs

Edit fields, then Apply & refresh (or use on the card). Same payload as the public demo API.

Last response JSON

app/engines/tools/service.py

Leading lines of the real module (marketing excerpt).

"""Operator pocket tools — small pure functions used by /tools.

Each function returns a dict with the inputs echoed back, the result, and a
short interpretation sentence (in casual exec tone).
"""
from __future__ import annotations

from dataclasses import dataclass
import math
from typing import Iterable


# -------- IRR / NPV ---------------------------------------------------------

def npv(rate: float, cashflows: list[float]) -> float:
    return sum(cf / ((1 + rate) ** t) for t, cf in enumerate(cashflows))


def npv_rate_sensitivity(rate: float, cashflows: list[float], bump: float = 0.01) -> dict:
    """±bump hurdle NPV and approximate $ / 1% change in NPV (last period scale)."""
    base = npv(rate, cashflows)
    up = npv(rate + bump, cashflows)