# TODO

- __CRATES__
  - _BUNDLER_
  - _CLI_
    - UX: launch
      - if first, test read/write speed, add warning if too low (<2gb/s)
      - check available disk space
      - pull latest version and notify if out of date
    - FEAT: add custom path support for config.toml
  - _COMPUTER_
    - BUG: **add rollback of states (in stateful)**
    - FEAT: add support for per index computation
    - FEAT: Add percentiles of cost basis weighted by amount invested compared to total invested
    - BUG: fix min fee_rate which is always ZERO due to coinbase transaction
    - BUG: before computing multiple sources check their length, panic if not equal
    - DX: create usd versions of vecs structs instead of having options everywhere
    - FEAT: datasets
      - `sats` version of all price datasets (average and co)
      - pools
        - highest dominance
        - consecutive blocks
        - max consecutive blocks
        - add indexes back to the mempool.space version of pools as we need the correct one for the API
      - price
        - oracle (https://utxo.live/oracle/UTXOracle.py)
      - cohorts
        - costs basis by percentile
        - address counts relative to all datasets
        - revived/sent supply datasets
        - add `p2pk` group (sum of `p2pk33` and `p2pk65`)
        - add utxo count, address count, supply data for  by reused addresses in groups by address type
        - add more date ranges (3-6 months, 5-7 years and more)
        - % of volume
      - indicators
        - pi cycle
      - https://mainnet.observer
      - https://glassnode.com
      - https://checkonchain.com
      - https://researchbitcoin.net/exciting-update-coming-to-the-bitcoin-lab/
      - https://mempool.space/research
  - _ERROR_
  - _FETCHER_
  - _INDEXER_
    - PERF: parse only the needed block number instead the last 100 blocks
      - maybe using https://developer.bitcoin.org/reference/rpc/getblockhash.html
  - _INTERFACE_
    - DX: Maybe change `json` to:
      ```json
      {
        "price_close": {
          "data": [115976.6, 115943.4],
          "unit": "USD",
          "range": {
            "from": 19627,
            "to": 19628
          }
        }
      }
      ```
    - DX: create pagination enum
      - from to
      - from option<count>
      - to option<count>
      - page + option<per page> default 1000 max 1000
    - BUG: from/to/count params don’t cap all combinations
      - example: from -10,000 count 10, won’t work if underlying vec isn’t 10k or more long
  - _LOGGER_
    - BUG: remove colors from file
  - _PARSER_
  - _SERVER_
    - api
      - FEAT: copy mempool's rest api
        - https://mempool.space/docs/api/rest
      - FEAT: add extensions support (.json .csv …) instead of only format
      - FEAT: if format instead of extension then don't download file
      - BUG: ddos protection
        - against API params varying in range
        - search
        - fuzzy on typo
          - https://github.com/rapidfuzz/strsim-rs or stick with current impl
          - create map of all single words
          - do some kind of score with that ?
      - FEAT: discoverability
        - search
      - ???: remove redirects ?
    - FEAT: add support for https (rustls)
  - _STORE_
    - FEAT: save height and version in one file
  - _STRUCTS_
  - _TRAVERSABLE_
  - _GLOBAL_
    - PERF: https://davidlattimore.github.io/posts/2025/09/02/rustforge-wild-performance-tricks.html
- __DOCS__
  - _README_
    - FEAT: add a comparison table with alternatives
    - FEAT: add faq
- __WEBSITES__
  - _PACKAGES_
    - DX: move the fetching logic from `bitview` website to an independent `brk` package which could be published to npm
      - https://www.npmjs.com/package/@mempool/mempool.js
      - auto publish with github actions
  - _BITVIEW_
    - EXPLORER
      - FEAT: blocks (interval as length between)
      - FEAT: transactions
      - FEAT: addresses
      - FEAT: miners
      - FEAT: xpubs ?
    - CHART
      - FEAT: Make candlesticks a bi-series with a candlestick series and a line when too zoomed out (like the auto mode)
      - FEAT: Add min/max markers back now that they can be ignored when scaling the chart (to avoids stuttering)
      - BUG: selected unit sometimes changes when going back end forth
      - FEAT: add support for custom charts
      - BUG: price scale format depends on unit, hide digits for sats for example (if/when possible)
      - FEAT: shows certain series as [scatter plots](https://github.com/tradingview/lightweight-charts/issues/1662) with a solid sma/ema
        - mainly datasets with a big variance like raw `hash_rate`
      - BUG: hide pane if no series on it
      - BUG: fix (and reset) pane size (50/50) when changing charts
      - UX: units: add short name / long name / title
      - BUG: verify that "compare" folders aren't missing charts/datasets
      - LEGEND
        - UX: add link to explanation for each name (to glassnode ?)
    - TABLE
      - FEAT: pagination
      - FEAT: exports (.json, .csv,…)
      - UX: improve dataset selection
      - UX: display 1k values (instead of 10k) but to avoid caching multiple times the same values apply everywhere
    - SEARCH
      - UX: improve
      - UX:datasets add legend, and keywords ?
      - FEAT: support height/address/txid
    - GLOSSARY
      - FEAT: Add ?
    - NAV
      - UX: move share button to footer ?
      - FEAT: add hide sidebar button
      - BUG: when clicking on already selected option, pushes to history, bad !
    - GLOBAL
      - BUG: improve behavior when local storage is unavailable by having a global state, otherwise the website forgets/don't save user's settings
      - FEAT: Add manual theme switcher, maybe in a smart way to avoid using real estate ?
      - UI: font:
        - https://fonts.google.com/specimen/Space+Mono
    - PERF: keep as many files as possible [under 14kb](https://endtimes.dev/why-your-website-should-be-under-14kb-in-size/)
    - DX: [No classes](https://news.ycombinator.com/item?id=45287155)
    - UX: [Organic animations](https://courses.joshwcomeau.com/playground/magic-wand-final)
- __GLOBAL__
  - check `TODO`s in codebase
  - rename `output` to `txout` or `vout`, `input` to `txin` or `vin`
  - https://マリウス.com/thoughts-on-cloudflare/
  - tor: https://news.ycombinator.com/item?id=45683380
  - design: https://opencode.ai/
  - design: https://vortex.dev/
