Skip to content
BrightPath

Progress graphs

Data a clinician can actually act on.

Session data only matters if it changes a decision. BrightPath turns thousands of recorded trials into a set of graphs built for real clinical questions. Here is each one, running on sample data you can explore, with a plain explanation of how it works and when to reach for it.

Why so many

One number rarely tells the whole story.

Accuracy alone hides how much a child is being prompted. A rising average hides a plateau in the last two weeks. Each of these graphs isolates one honest question, so a supervisor, a therapist, and a parent can each see the part of the record that matters to them. Every graph below is interactive. Hover or tap the marks to read the values.

Open goalClosed goal
at-risk25%50%75%0%100%Attempts (effort) →Accuracy ↑
Hover a dot: right = more practice, high = more accurate, bigger = more independent. Bottom-right is the at-risk zone.
bubble scatter

Goal Velocity Constellation

Attempts × accuracy with independence-weighted stars.

A scatter of every active goal, plotted so you can see effort against payoff at a glance. Each dot is one target: how far right it sits shows how many attempts it has taken, how high it sits shows how accurate the child is, and how big it is shows how much of that accuracy is independent. It is built to surface the goals that are costing a lot of practice while returning little accuracy.

How it works

The app groups every recorded session event by target, then for each target computes three numbers. Attempts is the raw count of events for that target. Accuracy is the share of those events marked correct, as a percent. Independence is the share marked at the independent prompt level, as a percent. Targets are sorted by attempts (most first, ties broken alphabetically by title) and the top 24 are kept. To place a dot, the app finds the largest attempt count in the plotted set and scales every dot's x by attempts divided by that maximum, so the busiest goal sits at the right edge. The y position is accuracy divided by 100, clamped to the 0 to 1 range, measured up from the bottom. The dot radius is 3.5 plus independence-over-100 times 4.5, so radius runs from about 3.5 pixels at zero independence to about 8 pixels at full independence. Color is green when the goal's status is closed, otherwise the app's teal primary. Every dot is drawn at 86 percent opacity inside a thin bordered rectangle. Hovering a dot shows the target name, attempt count, accuracy, and independence.

Why it works

Effort and payoff are two independent quantities, and a scatter is the honest way to show two quantities at once without implying one causes the other. Putting attempts on x and accuracy on y turns the abstract idea of a stalled goal into a spatial one: bottom-right is exactly where a clinician does not want a dot, high effort with low accuracy. Folding independence into dot size adds a third clinically important dimension (is the accuracy prompted or real) without adding a second chart, and color separates finished work from open work so the eye can ignore closed goals.

When it is useful

A BCBA reviewing a caseload before a treatment-plan update reaches for this to catch targets that are absorbing session time without moving. A dot far to the right but low down flags a goal to rework, reteach, or retire. A small dot high up flags accuracy that is real on paper but still heavily prompted, so independence is the next thing to build.

CorrectPromptedOther
0501006/166/257/7
Hover or tap a day to see its response mix. Tap a legend swatch below to isolate a band.
stacked-area

Session Impact River

Stacked daily response composition over time.

A flowing, stacked area chart that shows the daily mix of a child's session responses over time. Each day is split into three bands that always add up to 100 percent: how often the child answered correctly on their own, how often they needed a prompt, and everything else. Reading it left to right, you can watch the green band grow and the red band shrink as independent responding improves.

How it works

The app starts from timestamped session events. Each event carries a result of one of four kinds: correct, prompted, incorrect, or noResponse. Events are grouped by calendar day (year, month, day of the timestamp; events with no timestamp are dropped). Within each day the app counts the total events, the number marked correct, and the number marked prompted. It then computes three percentages of that day's total: correctPct = correct / total * 100, promptedPct = prompted / total * 100, and otherPct = (total - correct - prompted) / total * 100. That "other" band folds incorrect and noResponse together, so the three percentages always sum to 100 for any day with at least one event. Days are sorted in ascending date order to form the series. If only a single day exists, that day is duplicated so the area still has width to draw. The painter then lays down three stacked ribbons from the same baseline: the green ribbon runs from 0 up to correctPct, the orange ribbon from correctPct up to correctPct + promptedPct, and the red ribbon from correctPct + promptedPct up to 100. Each ribbon is built as a filled path that traces the top edge left to right across the days, then the bottom edge right to left, and closes. Points are spaced evenly along the x axis by their index, not by real calendar gaps, so consecutive recorded days sit at equal horizontal spacing regardless of the true time between them.

Why it works

Because every day is normalized to 100 percent, the picture answers a question that raw counts cannot: not "how much did we practice" but "what was the quality of the responding." A busy day and a quiet day are shown on the same footing, so a caregiver or clinician sees composition rather than volume. Stacking correct at the bottom, prompted in the middle, and other on top mirrors the clinical hierarchy of independence, so a healthy trend reads visually as green rising and the layers above it thinning. The river metaphor makes gradual, week over week shifts easy to feel at a glance, which is exactly the timescale on which prompt fading and skill acquisition actually move.

When it is useful

A BCBA reaching for evidence of prompt fading, or a therapist or parent wanting to know whether a child is answering more on their own lately, would open this graph. It is the right view when the question is about the changing quality of responses over weeks, for example confirming that independent correct responses are climbing while prompted and error responses recede before deciding to thin support or advance a target.

Home practice, last 6 weeks
SMTWTFSWk 1Wk 2Wk 3Wk 4Wk 5Wk 6
Less
More
Darker cells mean more home practice. 27 of 42 days practiced, 399 min total. Hover a day for its detail.
Empty / lowBusiest day
calendar heatmap

Carryover Heat Calendar

Six-week caregiver practice intensity map.

A six-week grid where every square is one calendar day of caregiver home practice. The darker a square, the more practice minutes were logged that day. It gives a family and their clinician a fast read on how steady home practice has been, and where the gaps fall.

How it works

The app builds a fixed window of the last 42 days, counting back from today (today minus 41 through today, oldest first). It walks every caregiver practice log, drops the timestamp to a calendar day (year, month, day), and adds up durationMinutes per day, so several sessions on one day stack into a single daily total. Days with no logged practice count as zero. It then finds the busiest day in the window (the max of all daily totals, floored at 1 so the math never divides by zero). Each day's color comes from one number: its minutes divided by that max, clamped to 0 through 1. That ratio drives a straight linear color blend from a faint neutral tile at ratio 0 to the full brand teal at ratio 1. So the scale is relative to the family's own busiest day, not a fixed minute threshold. The grid itself is responsive: the app fits between 7 and 14 columns depending on card width, then lays the 42 days out row by row, left to right, top to bottom, padding the final row with blank squares. Each real square shows a tooltip with the date and its minute total.

Why it works

Consistency is the thing that actually moves carryover, and consistency is a pattern over time, not a single number. A calendar heatmap makes streaks and gaps visible at a glance in a layout people already understand from habit trackers. Because the shading is scaled to the family's own busiest day rather than an absolute target, it reads fairly whether a household practices in five-minute or thirty-minute blocks, and it never shames a family with an unreachable benchmark. The empty squares are as informative as the dark ones.

When it is useful

A BCBA reviewing home-program follow-through before a parent check-in, or a caregiver glancing at their own last six weeks. If the recent columns are mostly pale, that is the conversation starter: practice has thinned out, and generalization at home may be stalling. Clusters of dark squares confirm a routine is holding.

Requests with words · daily accuracy
0255075100last 4 daysMonTueWedThuFriSatSunMon
No plateau flagged: trajectory is still changing meaningfully.
Daily accuracyRecent 4-day windowEndpoint comparison
Hover a point for that day's accuracy, or the shaded band for the flatness math.
line

Plateau Detector Curve

Trend stability check over recent sessions.

A simple day-by-day line of accuracy that watches for flattening. It plots how correct a learner's responses are on each session day, then checks whether the most recent stretch has stopped moving. When the recent line goes flat, the card raises a plateau flag so the team knows to look at the plan again.

How it works

The app groups every recorded response by calendar day and sorts the days oldest to newest. For each day it computes accuracy as correct responses divided by total responses that day, times 100, giving a percentage from 0 to 100. Those daily percentages become the points on the line, with the x position being the day's order in the sequence (0, 1, 2, and so on) and the y position being the percentage. The plateau check is deliberately plain: it needs at least four days of data, it takes the last four points, it subtracts the accuracy of the first of those four from the accuracy of the last, and it takes the absolute value of that difference. If the recent line has moved less than 3 percentage points across those four days, in either direction, the card flags a plateau. Otherwise it reports that the trajectory is still changing meaningfully. There is no smoothing or regression involved, just the endpoint-to-endpoint change across the recent window.

Why it works

A plain line is the honest way to show a trend over time, and accuracy on a fixed 0 to 100 scale is easy to read at a glance. The flatness rule is intentionally transparent rather than statistical, so a parent or clinician can understand exactly why the card did or did not raise a flag. Comparing only the endpoints of the recent window keeps the check stable against small day-to-day wobble while still catching a genuine stall, which is the moment worth acting on in ABA work.

When it is useful

A BCBA reviewing a target that used to climb but now seems stuck. When the curve flattens for several sessions, the flag is a prompt to revisit the intervention: change the prompt strategy, adjust the reinforcement, raise or lower the difficulty, or move toward generalization rather than continuing to run the same procedure that has stopped producing gains.

Session to HomeSession to GeneralizedHome to OutcomeGeneralized to Outcome
SessionHome carryover27 unitsGeneralized20 unitsTransfer outcome66 units
Effort is a pipeline: session trials become home practice, which becomes durable, generalized skills. Hover a band or node.
sankey

Skill Transfer Sankey

Session effort to home carryover and generalized mastery.

A flow map that shows how a learner's effort moves through three stages: work done in therapy sessions, practice carried over at home, and skills that generalize into lasting mastery. Thicker bands mean more volume moving along that path, so you can see at a glance where progress transfers well and where it thins out.

How it works

The app turns three raw counts into weighted units. Session effort is the total number of trial attempts logged. Home carryover is the number of home practice logs in the last 30 days, multiplied by 3. Generalized mastery is the number of mastered or achieved targets, multiplied by 5. Those multipliers deliberately let a smaller number of home sessions or mastered targets carry visual weight comparable to many session trials. The diagram has four nodes laid out left to right: a Source node (Session effort) on the left, two middle nodes stacked vertically (Home carryover on top, Generalized mastery on the bottom), and a Result node (Transfer outcome) on the right. Node heights are proportional to weight. The source node height scales to (session + home); the result node height scales to (session x 0.55 + generalized); the two middle node heights split the available vertical space in proportion to their weights, each clamped to a minimum height so a node never disappears. Four flow bands connect them, drawn as smooth cubic-bezier ribbons. Band 1 (Source to Home) is weighted by session. Band 2 (Source to Generalized) is weighted by home. Band 3 (Home to Result) is weighted by session x 0.55. Band 4 (Generalized to Result) is weighted by generalized. Each band's stroke width is weight divided by the largest single flow weight, times a max stroke, clamped so even a tiny flow stays at least 8px wide and readable. The Transfer outcome total shown on hover is (session x 0.55 + generalized).

Why it works

A sankey is the natural fit for a story about volume moving through stages and losing or holding strength along the way. Effort in a clinic is not a single number, it is a pipeline: trials become home practice, home practice becomes durable skills. Band thickness maps directly onto that intuition, so a parent or clinician can read where the flow narrows without needing to interpret axes. The heavy weighting of home logs and mastered targets keeps the rarer, higher-value events visible next to the high-frequency trial counts.

When it is useful

A BCBA reviewing a case wants to check whether session gains are actually transferring. If the Source to Home band is thick but the Home to Result band is thin, session work is happening but not carrying over into durable, generalized skills, which is a cue to add generalization programming or send more targeted home practice. A parent can see the same picture in plainer terms: are the things we work on in session showing up at home and sticking.

Target (size = independence)
ExpectedProtectFlagPrioritizeSimpler → More complexLess → More consistent
Each dot is one target · hover to see its consistency, independence, and complexity. The lower-right corner is the priority pile.
quadrant scatter

Consistency vs Complexity Quadrant

Relative complexity percentile vs consistency.

A scatter of every active target for one learner, arranged so you can see at a glance which skills are both hard and shaky. Each dot is one target. Left to right shows how complex the skill is relative to the others, up and down shows how consistently the learner gets it right, and the size of the dot shows how independently they do it. A crosshair splits the space into four quadrants so the corner a dot sits in tells you what to do next.

How it works

The app starts from per-target performance. For each target it counts that target's practice events and computes two percentages: consistency is the share of events scored correct (accuracyPct), and independence is the share of events done at the independent prompt level (independencePct). Complexity is not a raw number, it is a relative rank. Targets are sorted by prompt level first (independent, gesture, verbal, model, physical, so more support needed sorts as more complex) and then alphabetically by title. Each target's horizontal position is built as xNorm = rank * 0.86 + (promptIndex / 4) * 0.14, where rank is the target's position in that sorted list scaled from 0 to 1 (i divided by count minus 1). So 86 percent of the horizontal spread comes from rank order and 14 percent is a nudge toward the right for targets that need heavier prompting. The tooltip shows this as a complexity percentile of xNorm times 100. Before drawing, a fit step reads the min and max of the x values and of consistency, centers them, and enforces a minimum span (0.42 on x, 42 points on consistency) so a tight cluster of targets still spreads across the panel instead of collapsing into one spot. Positions are then normalized into the drawing area and clamped to 0 to 1. The dividers are drawn at fixed semantic anchors: the vertical line at complexity 0.5 and the horizontal line at consistency 50 percent, each mapped through the same fit. Dot radius is 3 plus independence over 100 times 3.5, so a fully independent target is about twice the area of a fully prompted one. Points are sorted by x and joined with a faint line to hint at the consistency-versus-complexity slope.

Why it works

Clinicians juggle many targets at once and need a triage view, not another single-metric bar. Encoding three things at once, difficulty on x, reliability on y, and independence as size, lets a therapist find the one corner that matters most, targets that are complex but inconsistent, in a single glance. Using a relative rank for complexity rather than an absolute score keeps the picture readable for any caseload, and the enforced minimum span means even a learner with only a handful of similar targets still gets a spread-out, honest-looking chart instead of a single clump.

When it is useful

During session planning or a supervision review, when a BCBA is deciding where to spend limited teaching time. The lower-right quadrant, complex and inconsistent, is the priority pile: skills that are demanding and not yet reliable. The upper-right, complex but consistent, are wins worth protecting. The left column holds simpler targets where high consistency is expected and low consistency is a flag.

Introduced12Prompted success10Partial independent7Mastered4Maintained2
Five stages counted independently, so they overlap · not a strict subset. Tap a bar for its definition.
funnel

Readiness-to-Mastery Funnel

Stage counts from introduction to sustained performance.

A five-stage funnel that counts how many learning targets sit at each step of the journey, from freshly introduced all the way to maintained after mastery. It shows at a glance where targets are piling up and where progress is slowing down.

How it works

Each of the five stages is a separate count over the learner's targets and session events, so the stages overlap rather than strictly subset one another. Introduced is the total number of targets. Prompted success counts the distinct targets that have at least one logged attempt where the prompt level was anything other than fully independent. Partial independent counts targets whose independence percentage (share of attempts done with no prompt) is at least 40 percent. Mastered counts targets whose status is mastered or achieved. Maintained counts targets that are closed and were last updated more than 30 days ago, standing in for skills that have held up over time. The app finds the largest of the five counts and calls it the max. For each stage it computes ratio = count / max, clamped to 0 through 1, then a width factor of 0.28 + ratio * 0.72. So even a zero-count stage still shows a short 28 percent stub, and the tallest stage fills the full width. Each row draws the stage label on the left, the raw count in bold on the right, and a rounded horizontal bar beneath filled to that width factor.

Why it works

A funnel reads top to bottom as a story of attrition, which matches how a clinician thinks about a target moving from introduction toward durable mastery. Because each bar is scaled against the busiest stage, the eye lands immediately on the widest bar (where targets accumulate) and the narrow ones (where flow is thinning). The 28 percent floor keeps small or empty stages legible instead of vanishing to a sliver, so a stage with zero maintained targets still reads as a labelled step rather than a gap.

When it is useful

A BCBA reviewing a caseload or a single learner during a program-planning meeting reaches for this when the question is where is progress getting stuck. If Introduced and Prompted success are wide but Partial independent and Mastered stay narrow, targets are being taught but not fading prompts, which is a cue to revisit prompting or reinforcement strategy. A healthy pipeline shows a gentle taper with a real Maintained bar at the bottom.

051015205/115/185/256/16/86/15attempts
Attempts / weekMilestoneIntervention
Hover a bar for that week's attempt count, or a chip for its milestone detail.
column/bar chartwith an annotation track of event chips below

Therapy Rhythm Timeline

Weekly attempt cadence with milestone markers.

The Therapy Rhythm Timeline shows how much practice happened each week over the last six weeks, drawn as a row of bars, with small markers underneath that flag the notable events in that stretch. It answers a simple question at a glance: is the pace of therapy steady, climbing, or slipping, and what happened along the way.

How it works

The app fixes a six-week window. It finds the Monday of the current week, steps back 35 days to the Monday six weeks ago, and builds six weekly buckets spaced seven days apart. Every recorded response attempt is stamped to the Monday of its week and counted, so each bar height is the raw number of attempts logged in that week (one session event equals one attempt). Weeks with no logged attempts stay at zero rather than being dropped. The vertical axis is scaled to give headroom: the top of the chart is the tallest week's count (with a floor of 4) multiplied by 1.25. Each bar sits at its week index, is 14 wide with lightly rounded corners, and is labelled on the x-axis with the month/day of that week's Monday. Below the bars, the app lists up to four milestone markers drawn from the underlying event log, sorted newest first. Markers come from real events: a goal being launched or achieved, a target reaching mastery, home practice being activated, tracking starting, or an auto-detected shift in intensity. The intensity marker fires only when the latest week's attempt count differs from the prior week's by 35 percent or more (and the prior week had at least 6 attempts), and it reads as an increase or decrease with the exact percentage. Each marker renders as a rounded chip labelled month/day followed by its title.

Why it works

Attempt volume is a count over evenly spaced weeks, and bars are the honest way to show counts: height maps directly to how much work happened, and equal-width weekly slots make the cadence easy to read as a rhythm. Pairing the bars with a thin track of dated event chips layers the story on top of the numbers, so a clinician sees not just that a week dipped but that a goal was mastered or a home plan started right around then. The fixed six-week window keeps the picture comparable session to session instead of stretching or compressing with the data.

When it is useful

A BCBA reviewing a case before a supervision meeting or a parent check-in reaches for this to gauge whether therapy intensity has held steady. If the most recent bars drop and an "intervention intensity decreased" chip appears, that is the cue to ask whether attendance, illness, or a schedule change is behind the slowdown before reading too much into a flat accuracy trend. A rising cadence with a "Goal achieved" chip tells a reassuring story worth sharing with the family.

More independent → more supportThin sample
more independentIndependent70% (44)Gesture76% (29)Verbal86% (21)Model86% (14)Physical86% (7)more support
Independent carries the most attempts (44) at 70%. Hover a rung for its correct / incorrect / prompted / no-response breakdown.
horizontal bar / ranked progress-bar chart

Response-to-Intervention Ladder

Correct-rate by prompt support level.

A stack of five labelled bars, one for each prompt level a child can respond under, from Independent at the top down to Physical at the bottom. Each bar shows the share of responses that were correct at that level, so you can see at a glance where a child is doing well on their own and where they still lean on support.

How it works

Every logged response carries two things: the prompt level the therapist used (Independent, Gesture, Verbal, Model, or Physical) and the result (correct, incorrect, prompted, or no response). The app sorts all of a child's responses into five buckets by prompt level. For each bucket it counts how many results were correct, divides by the total responses in that bucket, and multiplies by 100. That percent becomes the fill of the bar, and the raw count is shown beside it as "72% (18)". A bucket with no responses reads 0% and sits empty. The rungs are always drawn in the same fixed order, from least support (Independent) at the top to most support (Physical) at the bottom, which is what makes it read as a ladder rather than a plain bar list.

Why it works

Prompt level is an ordered idea, not just a set of categories: Independent means the child did it alone, Physical means an adult guided their hands. Stacking the levels as rungs turns that order into something you can read top to bottom. Because each bar is a simple correct-rate, the eye naturally compares the low-support rungs against the high-support ones. Strong bars near the top mean the child is succeeding with little help; strong bars only at the bottom mean success still depends on heavy support. Keeping the count next to each percent guards against reading too much into a rung built from only two or three attempts.

When it is useful

A BCBA or therapist reaches for this when deciding whether it is time to fade prompts. If Independent and Gesture rates are climbing week over week, the child is earning more independence and support can be pulled back. If the only strong rung is Physical or Model, the plan may be moving too fast and needs more scaffolding before fading. Parents can read it the same way: high bars near the top are the goal, because that is the child doing the skill on their own.

Rolling mean±1σ band
Window
0255075100
Hover the line to see each day's rolling mean, ±1σ band, and variability. A tightening band as the line climbs signals steadier, more independent responding.
line-with-band

Confidence Band Progress

Rolling mean with ±1σ confidence envelope.

This graph shows a smoothed trend of daily accuracy along with a shaded band that reflects how much performance has been bouncing around lately. The line is the recent average, and the band shows the spread. A narrow band means steady, predictable days. A wider band means results have been swinging more from one day to the next.

How it works

First the app builds one accuracy point per calendar day: it groups every recorded attempt by the day it happened, then divides correct attempts by total attempts for that day to get a percent (0 to 100), and sorts the days oldest to newest. It then walks through those daily points in order. For each day it looks at a trailing window of up to five days (that day plus the four before it). Over that window it computes the mean accuracy and the population variance (average of squared distances from the mean), takes the square root for the standard deviation (sigma), and plots three values for that day: the mean, an upper edge at mean plus one sigma, and a lower edge at mean minus one sigma. The upper and lower edges are each clamped to stay within 0 and 100. The mean values form the drawn line; the space between the upper and lower edges is filled to make the band. The line is drawn as a smooth curve once there are at least four days of data, and per-day dots are shown only when there are sixteen or fewer days so the chart never gets crowded.

Why it works

A single trend line hides how reliable that trend is. By pairing the rolling mean with a spread band from the same recent window, the chart answers two questions at once: which direction is accuracy heading, and how trustworthy is that direction right now. A tightening band as the line climbs is the clearest possible sign of a skill becoming both stronger and more consistent, which is exactly what a therapy team is looking for before fading support or advancing a target.

When it is useful

A BCBA reaches for this when a raw daily accuracy plot looks jagged and it is hard to tell real progress from noise. It is most useful right before a clinical decision, deciding whether a target is stable enough to advance, whether a new teaching procedure has settled performance down, or whether a wide band means the learner is still having very good and very bad days and needs more time.

The everyday view

Plus the dashboard charts you would expect.

Alongside the signature graphs, the progress dashboard carries the familiar reads a team checks every day. They cover the basics so the graphs above can answer the harder questions.

  • Domain profile radar
  • Accuracy trend line
  • Response mix donut
  • Weekly workload bars
  • Prompt distribution
  • Target performance meters
  • Home practice summary

Built on your clinic’s real data.

Every graph here runs on the trials your team actually records, right inside the app, so what you see is the real picture and not a sample. The data stays private throughout, and the security page explains how.

Read the security model