Skip to content

Build PI-hub: research dashboard for the eSPUD PI - #1

Merged
shashankbl merged 4 commits into
mainfrom
shashankbl/update-espud-readme
May 20, 2026
Merged

Build PI-hub: research dashboard for the eSPUD PI#1
shashankbl merged 4 commits into
mainfrom
shashankbl/update-espud-readme

Conversation

@shashankbl

Copy link
Copy Markdown
Contributor

Summary

Builds out the PI-hub app from a one-line placeholder into a working Next.js + TypeScript research dashboard for the eSPUD PI. Single PI runs many projects; each project has its own team, plan, setup, log, artifacts, and target venues. All data lives as markdown files under `content/` — no external database.

Features

  • PI profile — identity (name, title, pronouns, affiliation, location, timezone, avatar), contact, ORCID/Scholar/GitHub/LinkedIn/X, bio, focus areas, expertise tags, education, publications.
  • Projects — status (exploration / planning / active / paused / archived), Discord + Overleaf links, research plan, research setup, contributor lists, artifacts with URLs, append-only exploration log.
  • Members — first-class team roster with avatars, role, affiliation, expertise. Assign/unassign to any project via toggles on the member page or the project page.
  • Call-for-paper deadlines — venues with abstract / submission / notification / conference dates, topics, location, notes. Horizontal timeline visualization (next 6 months), live D : HH : MM : SS countdown to the soonest deadline, compact countdowns on every card. Each project assigned to a CFP carries an assessment status: `not_started`, `in_progress`, `submitted`, `accepted`, `rejected`, `late`, `abandoned`.
  • Dashboard — greeting + breadcrumb path, status donut, top-3 upcoming deadlines, recent activity feed, top contributors, project table with avatar stacks and progress bars.
  • Global search — URL-backed (`?q=…`) search across projects, members, expertise, and CFP topics.
  • Archive instead of delete — `/archives` page lists archived projects/members/CFPs with one-click Restore. Permanent Delete is only available from the archives page after explicit confirmation.
  • PDF report export — one-click `Export PDF` per project using `@react-pdf/renderer`. Includes overview, plan, setup, team, external contributors, target venues with status, artifacts, and the full log.
  • Visual polish — rounded outer shell on lavender background, narrow dark sidebar with SVG icons, color-coded add buttons in the topbar with contrast-flip hover, breadcrumb path, lowercased relative paths.

Stack

  • Next.js 15 (App Router) + React 19 + TypeScript
  • Plain CSS (no UI framework)
  • `js-yaml` for markdown frontmatter
  • `@react-pdf/renderer` for PDF generation

Storage model

```
content/
├── pi.md
├── projects/.md
├── members/.md
└── cfps/.md
```

Each file is YAML frontmatter (source of truth) + a generated human-readable markdown body. Relationships live on the parent: project's `memberIds` and `cfpAssignments`. Archived items carry `archivedAt: `; empty means active.

Test plan

  • `npm install && npm run build` — production build compiles cleanly
  • `npm run dev` — open http://localhost:3000
  • Edit and save the PI profile; confirm `content/pi.md` round-trips
  • Create a project; add plan, setup, Discord, Overleaf, artifact, log entry
  • Create a member; assign to the project via both the member page and the project page
  • Create a CFP with deadlines; assign the project; verify the timeline marker and live countdown
  • Walk every CFP status on a project assignment
  • Search in the topbar; verify the URL updates and lists filter
  • Archive a project, a member, a CFP; confirm they leave the main lists and show up in `/archives`
  • Restore from `/archives` and verify they return; permanent delete with confirmation
  • Click `Export PDF` on a project; open the file and verify clean line spacing and pagination
  • Verify breadcrumb path is lowercase and resolves UUIDs to friendly names
  • Resize the window to <880px and verify the sidebar collapses to a top strip

🤖 Generated with Claude Code

shashankbl and others added 4 commits May 19, 2026 16:58
A Next.js + TypeScript app for managing a Principal Investigator's
research practice. Single PI runs many projects, each with its own
team, plan, setup, log, artifacts, and target venues.

Features:
- PI profile (identity, contact, online profiles, focus areas,
  expertise, education, publications)
- Projects (status, plan, setup, Discord + Overleaf links,
  contributors, artifacts, append-only exploration log)
- First-class team Members with avatars, role, expertise, and
  per-project assignment toggles
- Call-for-paper deadline tracking with timeline visualization, live
  D:HH:MM:SS countdown, and per-assignment assessment status
  (not started / in progress / submitted / accepted / rejected /
  late / abandoned)
- Dashboard with greeting, breadcrumb path, status overview donut,
  top-3 upcoming deadlines, activity feed, contributor leaderboard
- Global URL-backed search across projects, members, expertise,
  and CFP topics
- Archive instead of delete; /archives page restores or permanently
  deletes items
- One-click PDF report export per project (@react-pdf/renderer)

Storage: markdown files under content/ (YAML frontmatter is the
source of truth; body is auto-generated). No external database.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sticky footer inside the shell crediting the builder and tooling.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Flat-config ESLint (eslint-config-next/core-web-vitals + typescript)
- typecheck script (tsc --noEmit)
- GitHub Actions workflow runs lint + typecheck + build on PRs and main
- Drop unused Section helper from report.tsx
- Use useNow() in Timeline to satisfy react-hooks/purity
- Downgrade react-hooks/set-state-in-effect to warn (intentional pattern)
- CONTRIBUTING: document the new validation commands and CI

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Suppresses the Node 20 deprecation warning on actions/checkout and
actions/setup-node. Node 20 is removed from runners on Sep 16, 2026;
Node 24 becomes the default on Jun 2, 2026.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@shashankbl
shashankbl merged commit 4a9877e into main May 20, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant