RMFU Desk

Professional research desk

The workflow layer for people who still write memos.

One integrated surface for briefs, library, drills, and risk — plus 14 calculator modes you can link to after sign-in. Not a feed chasing engagement.

Guides · Insights · Case studies · Workspace data stays tenant-scoped · See readiness for ops

Built like institutional software

Four reasons desks converge on RMFU instead of duct-taping slides, inboxes, and spreadsheets.

Unified surface

Brief, pulse, library, macro, and risk share one navigation model — muscle memory compounds across asset classes.

Quant tools, not ghost sheets

NPV schedules, Rule of 40, Kelly, CCC, and more — backed by real functions and shareable GET URLs for audit trails.

Retention by design

Spaced drills keep vocabulary exact when committees argue under stress — not just bookmarks in a browser.

Tenant trust

Sign-in gates workspace data. Public pages stay thin; your artifacts and roles stay yours.

Depth you can point to

Counts from this build of app/ — updated when the process caches marketing stats.

75,716 Lines of Python
14 Tool modes
60 Palette rows

Product surface

What ships inside the desk today — each module is a first-class route. Full product atlas →

01

Brief & pulse

Shared morning read: what moved, what matters, links into your canon.

02

Library

Frameworks and briefs indexed — search, filter, export when you need evidence.

03

Drills

Short sessions with spacing — judgment that survives a bad market week.

04

Risk & scenarios

Stress paths when a thesis must survive correlation breaks and gap opens.

05

Macro

Policy and cross-region lenses with the same visual discipline as the rest of the shell.

06

Companies & war room

Stitch entities and narrative when you are booked, not browsing.

How teams run the loop

Read → sharpen → stress → ship. Operating rhythm (full page) →

Anchor

Brief and pulse before models and headline parsers.

Sharpen

Library and drills so debates are not fought on vague language.

Stress

Risk labs before capital and career risk accumulate.

Ship

Export and trace what you believed, when, and why it still holds.

Bring your desk online

Sign in for the full tenant experience — same chrome your operators already train on.

Product · Workflow · Tour · Calculators · Guides · Platform

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)