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.
Scroll the diagram sideways to see all of it.
The 6 paths
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.
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.
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.
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.
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.
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.