Skip to content

Redesign Application Status and fold the college list into Discover - #48

Merged
DanialBeg merged 8 commits into
mainfrom
ui/application-tracking-refresh
Sep 24, 2026
Merged

DanialBeg merged 8 commits into
mainfrom
ui/application-tracking-refresh

Conversation

@ZubairQazi

Copy link
Copy Markdown
Collaborator

Application Status

  • The tab is now an overview: a status strip that filters the list, a deadline timeline, the tasks shared across schools, and one row per school sorted by deadline.
  • Each school has its own page: status, category, deadline round, net price, checklist, and removing the school. This replaces the tasks popup.
  • Shared tasks (recommendations, transcript, CSS Profile) are checked once for every school that needs them.

Discover

  • The College List tab is gone. Your list sits at the top of Discover: a map, the reach/match/safety balance, costs (average and per school), and where your schools are.
  • Per-school editing moved to the school page in Application Status.
  • The three suggestion boxes are now one "Picked for you" row.
  • Match cards are simpler, with a consistent color scheme.
  • New Public/Private filter.
  • Clicking "✓ On your list" removes a school; if it has progress, it asks first.
  • Emoji removed from the page.

Fixes

  • Map pins for schools saved before coordinates were stored, including old built-in list entries.
  • Searching no longer jumps the page.
  • Map hover no longer re-renders the map on every mouse move.

Notes

  • No schema changes. The one data write is saving missing map coordinates onto existing list entries.
  • Tested: typecheck, lint, 429 tests and the build pass.

The Application Status tab tried to show everything at once: a progress
ring, three stat tiles, a pipeline bar, a what's-left chart, and a row per
school carrying a progress bar, a stepper, two tags and a status dropdown.
The same submitted count appeared three times. It read as generated.

The tab is now an overview. A status strip counts where applications stand
and filters the list. A timeline pins each school's deadline across the
season; when the season is still far off, today collapses to a stub so the
deadlines get the width. The next deadline sits in a card beside the title.
One row per school, sorted by deadline, with a date block, task progress
and status.

Everything specific to a school moves to its own page, replacing the tasks
popup: status, deadline, what the round commits you to, and the checklist
as three connected stages.

Some tasks are done once for the whole list: teacher recommendations, the
transcript, the CSS Profile. They are shown once on the overview and a
tick applies to every school that needs them, from either page. A school
added later starts with any already finished. Test scores, fees and essays
stay per school because each one needs its own.

Countdowns are rounded the way a person says them: "about 14 months", not
"433 days". No schema change; tasks persist on the entry as before.
The College List tab repeated what Discover and Application Status already
had: a second search box, a status dropdown, and four charts. The list is
built on Discover, so it now lives there, and the tab is gone.

A strip at the top of Discover holds the list: a map with a pin per school,
the reach / match / safety balance, a logo per school, and a cost box with
the list's average net price and cost of attendance, plus the cheapest and
priciest for the student. Hovering or clicking a school swaps the box for
that school's fit and costs, with a link to its page. The strip collapses to
one row without the map. A school added from a card drops its pin in.

Entries saved before the map stored coordinates, including every school
from the old static list, had no pin. They are looked up once (by scorecard
id or legacy slug) and the coordinates saved onto the entry.

Per-school editing moves to the school page in Application Status: reach /
match / safety, the deadline round, net price, and removing the school.
Clicking a logo in the strip opens that page.

Discover's three suggestion boxes become one "Picked for you" row, each card
labelled and colored by why it was picked. Match cards drop the dead space
and the disabled button: the net price is a figure, the admission band sits
beside it in the color of the list category it becomes, and chips and
filters share a color only when they mean the same thing. Fit % is colored
by strength. Cards sit on a soft white so the colors read cleanly. Emoji
are gone from the page; schools without a logo show an initial.

Searching no longer throws the page upward: the picks stay put and the
cards dim while results load, instead of collapsing to one line.
Fixes from reviewing the branch:

- A saved checklist now follows the application round: moving a school to
  ED/REA adds the agreement task, moving away drops it. Ticking a shared
  task saves every school's checklist, which froze it before this.
- Next up picks the soonest school still to submit. It used the soonest
  deadline overall, so a submitted school hid the card entirely.
- A deadline that has passed on an unsubmitted school shows as passed, not
  as "no fixed date", and says to check the school or switch rounds.
- The school page's net price resolves legacy entries (it showed "No cost
  data" for schools from the old static list) and only says "at your
  income" when the school reports the student's bracket, not its average.
- One lookup for saved schools, cached for the session, instead of three
  separate queries for the same rows.
- The band pill color is defined once and shared by the card and popup.
- Stale comments about the College List tab, an unused class, unused
  exports and a misplaced doc comment are gone; a padding override that
  cancelled the link's spacing is fixed.
Public includes community colleges, which are public by definition; private
covers nonprofit and for-profit. The two act as a pair (one at a time, click
again to clear) and combine with the path, Affordable, sort and search
filters. Neutral fill like All paths, so they add no new color meaning.
The list strip's cost box names its lowest and highest net price as two
tidy rows (click one to see that school). Under the box, pills give the
number of states, how many schools are in-state, and the distance range
from home. Hovering the in-state pill, or any state with schools on the
map, tints that state; the state's tooltip lists its schools with logos.
Pin tooltips show the school's logo, with its category and location on
their own lines, and size to their content, flipping left near the edge.

"✓ On your list" on a card now removes the school when clicked (hover
says so, in red). A school with progress asks first, since its tasks go
with it.

From review: the map and strip share one resolved state per school; a
pinned school has a "Back to averages" control, so one pinned from the
lowest/highest rows can always be unpinned; crossing between fanned-out
pins no longer flickers; both box states hold one height; the in-state
pill only offers its hover with the map showing; state names and the map
tint come from shared data and the module token; where-line data is
memoized.
Hovering a state re-rendered the whole map on every mouse move: the
cursor position lived in React state, so all 51 outlines (~140k chars of
path data) were diffed dozens of times a second to move one tooltip. Now
what's hovered is state and where the cursor is lives in a ref: the
tooltip moves directly, once per frame at most, and the outlines are a
memoized layer that only re-renders when the highlighted state changes.
A test holds that line.

The states pill now lights up every state with schools, as the in-state
pill does for home. States with schools keep a faint tint at rest.

From review: the tooltip measures the map and itself each frame, so it
stays with the cursor after scrolling and flips left or up only when it
would actually overflow; the hovered pin is tracked by school, not list
position, and a hover on anything that has left the list is dropped; the
fill fade is back (CSS, no render cost); the highlight modes are typed
('all' / 'home') instead of a loose string, and only apply while their
pill is on screen.
@vercel

vercel Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
webapp Ready Ready Preview Sep 24, 2026 5:52am UTC

…m dates

main (#47) split Application Status into an overview plus a Tasks tab, while
this branch replaced the tasks popup with a page per school and folded the
College List into Discover. Kept this branch's structure; brought in the rest.

- Task due dates: the date control from SchoolTaskList now sits on each task
  row of the school page, so dated tasks still reach the calendar, week strip
  and deadline panel.
- Shared tasks (recommendations, transcript, CSS Profile) keep one date for
  every school that needs them: set from any school, shown on the calendar
  once ("— all your schools"), and ticked from the calendar for every school.
- The module opens on Application Status; its empty state links to Discover
  (the College List tab it pointed at is gone).
- Custom dates, the deadline panel/row and settings changes come in as-is.
- The Tasks tab (ApplicationTasksTab, SchoolTaskList) is dropped: the school
  pages cover it. Its task-event tests move to applicationTaskEvents.test.ts.
Fixes from reviewing the merge and the Category sort added on top of it.

Application Status
- "Sort by" gains Category: schools grouped under reach / match / safety /
  unranked headings, by deadline within each.
- A category this build doesn't know shows as Unranked instead of crashing
  every view (normalized once where the list loads; storage untouched).

Task due dates
- The date box keeps focus while typing, saves after a pause or on leaving,
  never saves a half-typed value, and only clears when really emptied.
- Shared tasks keep one date and tick across every school (withdrawn ones
  included, so a school brought back is in step); a new school inherits
  both, preferring an active school's date.
- Dates saved per school before this stay on the calendar, one per date,
  instead of all but one being dropped.

From main (#47), made to work here
- The tour resets to Application Status, the tab the module opens on.
- The calendar's remove button only shows on the student's own dates, not
  task dates (tagged with isTask); Dashboard "next due" skips ticked-off
  items and task dates.
- Custom dates stay visible for settings saved before Custom existed:
  saves now record which modules existed, and older lists are read by what
  they could only have been chosen from.
- Settings saves run in order on the last confirmed write, so a quick
  second change can't drop the first and a failed one can't slip through.
- Calendar writes compute once outside state updaters and wait for their
  list to load, so they can't save a stale copy.
- One ISO-day parser instead of two.
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Deploying timeline-prototype with  Cloudflare Pages  Cloudflare Pages

Latest commit: 46cd2ed
Status: ✅  Deploy successful!
Preview URL: https://43adc9a0.timeline-prototype.pages.dev
Branch Preview URL: https://ui-application-tracking-refr.timeline-prototype.pages.dev

View logs

@ZubairQazi

Copy link
Copy Markdown
Collaborator Author

@DanialBeg merged main (#47) into this branch.

Kept from #47

  • Task due dates, including the calendar tick. The date control is now on each task row of the per-school page.
  • Custom dates, and the deadline panel/row and settings changes.
  • Opening on Application Status. Its empty state now links to Discover instead of College List.

Replaced

  • The Tasks tab (ApplicationTasksTab, SchoolTaskList). Each school now has its own page with its checklist, so I dropped the all-schools page rather than keep two places to tick the same tasks.

Changed

  • Shared tasks (recs, transcript, CSS Profile) have one date and tick across every school. They show once on the calendar ("— all your schools"), and a calendar tick marks every school.
  • Fixes to Application Tracking: split status from tasks, and let students date their own work #47 code found in review:
    • the remove ✕ showed on task dates but did nothing
    • Custom dates were hidden for anyone who had turned a category off before Custom existed
    • Dashboard "next due" included ticked-off tasks
    • Settings saves could overwrite each other
    • calendar writes ran inside state updaters (double writes in StrictMode, and possibly stale data)

The commit messages on 9431bbd and 46cd2ed have the details.

@DanialBeg
DanialBeg merged commit 31f6b43 into main Sep 24, 2026
5 checks passed
@DanialBeg
DanialBeg deleted the ui/application-tracking-refresh branch September 24, 2026 06:37

This branch was successfully deployed

1 active deployment
Preview — 46cd2edb Deployed Sep 24, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants