Architecture

How PE Ratio works

PE Ratio reads your Jira projects twice a day, builds a briefing, and publishes it behind your company sign-in. Each company gets its own deployment, in its own accounts. This page shows the parts and the six paths that data takes between them.

Coming soon. Not yet available to buy.

How PE Ratio worksA refresh job reads Jira twice a day, keeps a daily history, applies the settings your admins choose and publishes a dashboard that your team opens through your company sign-in, with an optional AI assistant and optional Slack summaries.OUTSIDE PE RATIOPE RATIO, IN YOUR ACCOUNTSYOUR TEAMREAD ONLYPUBLISHEMAILSIGN INMESSAGESINPUTJiraissues, sprintsSTOREHistoryone snapshot a dayJOB1Refresh jobtwice a dayOPTIONAL5AI assistantfor adminsWEB APP2Dashboardbriefing and viewsSTORE4Settingswith a change logGATE3Sign-inyour company loginOPTIONAL6Slack summarysent by a personPEOPLEYour teamAdminViewerOther trackerscan be added.Not built yet.LEGENDComes from outsidePart of the productStored dataWhere the briefing is made1Start of a numbered pathOptional

Scroll the diagram sideways to see all of it.

Parts are named by what they do, with the mark of the tool each one uses today. The numbers mark the six paths described below. Dashed lines run only when the optional part is set up. The diagram describes the code as of October 2026.

The 6 paths

  1. Jira is read twice a day

    The refresh job runs on a schedule twice a day. It reads issues, sprints, boards and the change history of each issue from Jira, and sends only read requests. It applies your settings, computes the briefing and the metrics, and saves a snapshot of the day to the history. Trends come from that history. A second job adds the status changes of each issue to the history every three hours on weekdays.

  2. The dashboard is published again

    When the refresh job finishes, it builds the dashboard again with the day's data inside it and publishes it. The dashboard shows when its data was refreshed.

  3. Your team signs in

    Everyone signs in with your company login before the site loads. The dashboard reads the verified email address and gives each person a role: admin for the addresses you list, viewer for everyone else. It gives the day's data only to a person who has signed in.

  4. Admins change settings

    On the Settings screen, admins change the work-in-progress limit and other thresholds, the dashboard name and the ticket groups. Each change is saved with a record of who made it and when. It takes effect on the next refresh, and an admin can start a refresh from the dashboard. Viewers can read the settings but not change them.

  5. The AI assistant, if you turn it on

    When you add an OpenAI API key, admins can ask questions about the briefing, get a suggested follow-up message for a risk, and generate a weekly report. The dashboard sends data from the day's briefing to OpenAI. The assistant does not read Jira. Without a key, these features are off.

  6. Slack summaries, if you turn them on

    After each refresh, a job drafts the weekly brief and any alerts from fixed templates, and opens a GitHub issue for each draft. A person sends a draft to your Slack channel by starting the send job, or closes the issue to skip it. Nothing is posted to Slack without that step.

The parts

Jira
Your Jira site. PE Ratio reads issues, sprints, boards and the change history of each issue with an API token that has read access. It sends only read requests and does not change anything in Jira. Jira is its only source today.
History
One snapshot of the briefing for each day, and the status history of each issue. Trends such as cycle time and the health score are computed from it.
Refresh job
Runs on a schedule twice a day, or when an admin starts it. It reads Jira, applies your settings, and computes the briefing and the metrics.
AI assistant
Optional. Answers questions about the day's briefing, suggests a follow-up message for a risk, and writes a weekly report. Only admins can use it.
Dashboard
The web app your team reads, with the day's data built in. It gives the data only to a person who has signed in.
Settings
The changes admins make on the Settings screen, with a record of each change. The defaults come from a configuration file in the repository.
Sign-in
Your company login, in front of the whole site. It tells the dashboard who each person is.
Slack summary
Optional. A weekly brief and alerts, drafted from fixed templates. A person sends each one.
Your team
Admins can change settings, start a refresh and use the AI assistant. Viewers read the dashboard and the settings.

Other tools for each part

Each part uses one tool today. Some parts already work with other tools through that tool's own settings. Others can be extended to a new tool; those are marked "Not built yet".

Issue tracker

Today
  • Jira
Not built yet
  • Linear
  • GitHub Issues
  • GitLab
  • Asana
  • Azure Boards

The refresh job reads its source through one interface, so another tracker needs one new module for that tracker. Only Jira is built today.

Company sign-in

Today
  • Cloudflare Access
Works through Cloudflare Access
  • Google Workspace
  • Microsoft Entra ID
  • Okta
  • GitHub
  • One-time PIN by email

Cloudflare Access signs people in with the identity provider your company already uses. These need no change to PE Ratio.

Chat

Today
  • Slack
Not built yet
  • Microsoft Teams
  • Google Chat
  • Mattermost

The summaries are drafted from fixed templates and sent to an incoming webhook. Another chat tool needs a new sender. Only Slack is built today.

AI model

Today
  • OpenAI
Not built yet
  • Claude
  • Gemini

The AI assistant is optional and calls one model provider. Another provider needs a change to the dashboard. Only OpenAI is built today.

Settings database

Today
  • Neon Postgres
Not built yet
  • Supabase
  • Amazon RDS
  • Your own Postgres server

The refresh job connects to any Postgres database. The dashboard uses Neon's driver, so another Postgres host needs a change to the dashboard.

Hosting and scheduled jobs

Today
  • Cloudflare Pages
  • GitHub Actions
Not built yet
  • Vercel
  • GitLab CI/CD

The public demo already runs on Vercel, with sample data and no sign-in. A company deployment on another host or job runner needs changes, and none is built yet.

Built with

Refresh job
Python, on GitHub Actions in your repository
History
A Git branch in the same repository
Web app
React, on Cloudflare Pages
Sign-in
Cloudflare Access
Settings
Postgres
AI assistant
OpenAI, when you add a key
Slack summary
A Slack incoming webhook

About the demo

  • The demo uses a fictional company, Acme, with 18 engineers on 5 products. Its issues and sprints are generated sample data.
  • The demo reads no Jira site. Its data is generated again each day.
  • The demo has no sign-in. Every visitor sees the executive view as a sample admin.
  • In the demo, settings are read-only, the refresh button is hidden, and the AI features are off.
  • The demo sends nothing to Slack.