refactor(monorepo): adopt bun workspace layout (#45)

## Summary
- move the web app and Python tooling into a clearer monorepo layout
- switch JS package management to Bun with a single root lockfile and root orchestration scripts
- replace relative sibling-path assumptions with root-based env/path helpers and keep vendor tooling as submodules
- remove stale planning docs and old editor references

## Verification
- .prettierrc 60ms (unchanged)
components.json 4ms (unchanged)
eslint.config.js 62ms (unchanged)
package.json 3ms (unchanged)
src/app.css 26ms (unchanged)
src/app.d.ts 24ms (unchanged)
src/app.html 33ms (unchanged)
src/lib/components/charts/chart-utils.ts 150ms (unchanged)
src/lib/components/charts/ChartContainer.svelte 241ms (unchanged)
src/lib/components/charts/crosshair-plugin.ts 51ms (unchanged)
src/lib/components/charts/IPChart.svelte 157ms (unchanged)
src/lib/components/charts/ProtocolChart.svelte 122ms (unchanged)
src/lib/components/charts/SingularitiesList.svelte 46ms (unchanged)
src/lib/components/charts/SpectrumChart.svelte 41ms (unchanged)
src/lib/components/charts/SpectrumStatsChart.svelte 157ms (unchanged)
src/lib/components/charts/StructureFunctionChart.svelte 32ms (unchanged)
src/lib/components/common/DragGrip.svelte 10ms (unchanged)
src/lib/components/filters/DateRangeFilter.svelte 19ms (unchanged)
src/lib/components/filters/MetricSelector.svelte 49ms (unchanged)
src/lib/components/filters/PrimaryFilters.svelte 46ms (unchanged)
src/lib/components/filters/RouterFilter.svelte 20ms (unchanged)
src/lib/components/netflow/constants.ts 12ms (unchanged)
src/lib/components/netflow/DatasetDashboardPage.svelte 126ms (unchanged)
src/lib/components/netflow/NetflowDashboard.svelte 51ms (unchanged)
src/lib/components/netflow/types.ts 34ms (unchanged)
src/lib/datasets.ts 18ms (unchanged)
src/lib/i18n.ts 7ms (unchanged)
src/lib/index.ts 6ms (unchanged)
src/lib/schemas.ts 7ms (unchanged)
src/lib/server/datasets.ts 36ms (unchanged)
src/lib/server/paths.ts 15ms (unchanged)
src/lib/stores/crosshair.ts 20ms (unchanged)
src/lib/stores/netflow.svelte.ts 38ms (unchanged)
src/lib/stores/rangeSelection.ts 6ms (unchanged)
src/lib/types/types.ts 21ms (unchanged)
src/lib/utils.ts 9ms (unchanged)
src/lib/utils/timezone.ts 32ms (unchanged)
src/lib/utils/window-cache.ts 24ms (unchanged)
src/routes/+error.svelte 22ms (unchanged)
src/routes/+layout.svelte 9ms (unchanged)
src/routes/+page.svelte 21ms (unchanged)
src/routes/api/database/netflow/+server.ts 24ms (unchanged)
src/routes/api/datasets/+server.ts 8ms (unchanged)
src/routes/api/ip/stats/+server.ts 18ms (unchanged)
src/routes/api/netflow/files/[slug]/+page.svelte 197ms (unchanged)
src/routes/api/netflow/files/[slug]/+page.ts 15ms (unchanged)
src/routes/api/netflow/files/[slug]/details/+server.ts 28ms (unchanged)
src/routes/api/netflow/files/[slug]/ip-counts/+server.ts 17ms (unchanged)
src/routes/api/netflow/files/[slug]/singularities/+server.ts 25ms (unchanged)
src/routes/api/netflow/files/[slug]/spectrum/+server.ts 19ms (unchanged)
src/routes/api/netflow/files/[slug]/structure/+server.ts 19ms (unchanged)
src/routes/api/netflow/files/[slug]/utils.ts 19ms (unchanged)
src/routes/api/netflow/files/+page.svelte 27ms (unchanged)
src/routes/api/netflow/spectrum-stats/+server.ts 19ms (unchanged)
src/routes/api/netflow/stats/+server.ts 16ms (unchanged)
src/routes/api/netflow/structure-stats/+server.ts 18ms (unchanged)
src/routes/api/protocol/stats/+server.ts 17ms (unchanged)
src/routes/api/routers/+server.ts 9ms (unchanged)
src/routes/datasets/[dataset]/+page.svelte 12ms (unchanged)
src/routes/datasets/[dataset]/+page.ts 11ms (unchanged)
src/routes/netflow/files/[slug]/+page.svelte 10ms (unchanged)
src/routes/netflow/files/[slug]/+page.ts 13ms (unchanged)
src/routes/netflow/files/+page.svelte 8ms (unchanged)
svelte.config.js 5ms (unchanged)
tests/lib/chart-utils.test.ts 7ms (unchanged)
tests/routes/api-datasets.test.ts 8ms (unchanged)
tests/routes/datasets-page.test.ts 8ms (unchanged)
tsconfig.json 1ms (unchanged)
vite.config.ts 2ms (unchanged)

====================================
Loading svelte-check in workspace: /home/obo/projects/netflow-analysis/apps/web
Getting Svelte diagnostics...

====================================
svelte-check found 0 errors and 0 warnings
- 

## Notes
- Graphite CLI could not run in this NixOS environment because the installed Graphite (gt) simplifies the entire code authoring & reviewing lifecycle
for GitHub. It enables stacking PRs on top of each other to keep you
unblocked & your changes small, focused, and reviewable.

USAGE
  $ gt <command> [flags]

AUTHENTICATING
  Authenticating gt with Graphite enables submitting PRs and stacks:

  1. Open https://app.graphite.dev/settings/cli
  2. Create a new auth token
  3. Paste the generated gt auth --token <token> command into the terminal

TERMS
  stack:     A sequence of pull requests, each building off of its parent.
             ex: main <- PR "add API" <- PR "update frontend" <- PR "docs"
  trunk:     The branch that stacks are merged into.
		         ex: main
  downstack: The PRs below the given PR in a stack, i.e. its ancestors.
  upstack:   The PRs above the given PR in a stack, i.e. its descendants.

CORE COMMANDS
  gt init:            Initializes your Git repo to work with Graphite
  gt create:          Creates a new branch and commit your changes
  gt submit:          Submits the current branch & all downstack
                      branches to Graphite
  gt submit --stack:  Submits your current stack to Graphite
  gt modify:          Amends your current branch with new changes and
                      rebases all PRs above it
  gt restack:         Rebases every PR in a stack to have the latest
                      changes
  gt sync:            Pulls the latest trunk branch, rebases all open
                      PRs/stacks on top of the latest changes, and
                      prompts to delete any stale/old/merged branches
  gt checkout:        Interactively checks out any of your branches
  gt log:             Prints a graphical representation of your current
                      stack
  gt up:              Checks out the branch directly upstack
  gt down:            Checks out the branch directly downstack
  gt demo:            Walks you through examples to learn the Graphite
                      workflow via an interactive tutorial

  Run gt --help --all for a full command reference.
  Pass the --help flag to any command for specific help
  (ex: gt submit --help)

CORE WORKFLOW
  Run gt guide workflow to quickly learn how to:
    - create a new PR
    - stack a PR on top of an existing PR
    - respond to peer feedback from anywhere in your stack
    - sync the latest changes from main
    - merge your stack to your main branch

LEARN MORE
  Learn about custom aliases with gt aliases --help.
  Learn to customize gt with gt config --help.

  More documentation: https://graphite.dev/docs
  Our cheatsheet:     https://graphite.dev/docs/cheatsheet
  Tutorial videos:    https://www.youtube.com/@withgraphite
  Troubleshooting:    https://graphite.dev/docs/troubleshooting

FEEDBACK
	We'd love to hear your feedback! Join our Slack community at:
		https://community.graphite.dev
	or email us at: cli@graphite.dev.
	You can also submit feedback directly via gt feedback, which
	has the ability to attach logs if you're experiencing issues. binary is not compatible here, so this PR was published directly with GitHub CLI instead.
- local dirtiness remains inside  and  submodule worktrees only; the superproject branch is pushed and ready for review.

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

## Release Notes

* **Chores**
  * Restructured project directories: web app moved to `apps/web/`, database tools to `tools/netflow-db/`, and vendor dependencies to `vendor/` subdirectories.
  * Migrated package manager from npm to Bun across all frontend build, development, and validation commands.
  * Updated CI/CD pipeline to use Bun toolchain and Python 3.13.
  * Updated environment variable configuration and path handling throughout the project.
  * Removed archived planning documentation.
  * Updated all command references in documentation to reflect new structure and Bun-based workflows.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
8790639ac1oliver committed on 3/24/2026, 4:39:01 PM· committed by GitHubparents89c17493a67a9e
64 files changedLine totals unavailable