diff --git a/CHANGELOG.md b/CHANGELOG.md index 880eda9ac..39a57ec3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,23 +2,26 @@ ## v. 0.1.2 | WIP -### Parser - -- +![Image of the Satonomics Web App version 0.1.2](./assets/v0.1.2.jpg) ### App +- Performance + - Improved app's reactivity + - Added some chunk splitting for a faster initial load + - Global improvements that increased the Lighthouse's performance score from the low 30s to the high 70s - Chart - - Fix legend hovering on mobile not resetting on touch end + - Fixed legend hovering on mobile not resetting on touch end + - Updated legend padding so that the scrollbar, if visible, is less in the way + - Added yearly time scale setters (from year 2009 to today) - Misc - Support mini window size, could be useful for embedded views - -### Server - -- + - Hopefully made scrollbars a little more subtle on WIndows and Linux, can't test ## v. 0.1.1 | 849240 - 2024/06/24 +![Image of the Satonomics Web App version 0.1.1](./assets/v0.1.1.jpg) + ### Parser - Fixed overflow in `Price` struct which caused many Realized Caps and Realized Prices to have completely bogus data @@ -26,7 +29,7 @@ ### Server -- Added the chunk, date and time in the terminal logs +- Added the chunk, date and time of the request to the terminal logs ### App @@ -53,7 +56,7 @@ - Strip - Temporarily removed the Home button on the strip bar on desktop as there is no landing page yet - Settings - - Add version + - Added version - PWA - Fixed background update - Changed update check frequency to 1 minute (~1kb to fetch every minute which is very reasonable) @@ -64,3 +67,7 @@ ### Price - Deleted old price datasets and their backups + +## v. 0.1.0 | 848642 - 2024/06/19 + +![Image of the Satonomics Web App version 0.1.0](./assets/v0.1.0.jpg) diff --git a/README.md b/README.md index 684b9cf82..91686a10d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # SATONOMICS +![Image of the Satonomics Web App](./assets/latest.jpg) + ## Description TLDR: Free, open source, verifiable and self-hostable Bitcoin on-chain data generator and visualizer diff --git a/app/src/app/components/background.tsx b/app/src/app/components/background.tsx index 417e65da1..44def2c50 100644 --- a/app/src/app/components/background.tsx +++ b/app/src/app/components/background.tsx @@ -4,6 +4,7 @@ const texts = [ "satonomics", "satonomics", "satonomics", + "satonomics", "stay humble, stack sats", "21 million", @@ -29,6 +30,14 @@ const texts = [ "be your own bank", "resistance money", "foss", + "permissionless", + "great reset", + "orange pill", + "borderless", + "anonymous", + "nyknyc", + "low time preference", + "absolute scarcity", ]; export const LOCAL_STORAGE_MARQUEE_KEY = "bg-marquee"; diff --git a/app/src/app/components/frames/chart/components/actions.tsx b/app/src/app/components/frames/chart/components/actions.tsx index be422a4d2..142e65ab6 100644 --- a/app/src/app/components/frames/chart/components/actions.tsx +++ b/app/src/app/components/frames/chart/components/actions.tsx @@ -1,9 +1,7 @@ -import { generate } from "lean-qr"; - import { chartState } from "/src/scripts/lightweightCharts/chart/state"; import { setTimeScale } from "/src/scripts/lightweightCharts/chart/time"; -import { classPropToString } from "/src/solid/classes"; -import { createRWS } from "/src/solid/rws"; + +import { Button } from "./button"; export function Actions({ presets, @@ -14,6 +12,10 @@ export function Actions({ qrcode: RWS; fullscreen?: RWS; }) { + const ButtonShare = lazy(() => + import("./buttonShare").then((d) => ({ default: d.ButtonShare })), + ); + return (
@@ -37,18 +39,8 @@ export function Actions({ )} -
); } - -function Button({ - title, - icon, - colors, - onClick, - disabled, - classes, -}: { - title: string; - icon: () => ValidComponent; - colors?: () => string; - onClick: VoidFunction; - disabled?: () => boolean; - classes?: string; -}) { - return ( - - ); -} diff --git a/app/src/app/components/frames/chart/components/button.tsx b/app/src/app/components/frames/chart/components/button.tsx new file mode 100644 index 000000000..e2e2dcbd8 --- /dev/null +++ b/app/src/app/components/frames/chart/components/button.tsx @@ -0,0 +1,36 @@ +import { classPropToString } from "/src/solid/classes"; + +export function Button({ + title, + icon, + colors, + onClick, + disabled, + classes, +}: { + title: string; + icon: () => ValidComponent; + colors?: () => string; + onClick: VoidFunction; + disabled?: () => boolean; + classes?: string; +}) { + return ( + + ); +} diff --git a/app/src/app/components/frames/chart/components/buttonShare.tsx b/app/src/app/components/frames/chart/components/buttonShare.tsx new file mode 100644 index 000000000..e7642ba66 --- /dev/null +++ b/app/src/app/components/frames/chart/components/buttonShare.tsx @@ -0,0 +1,20 @@ +import { generate } from "lean-qr"; + +import { Button } from "./button"; + +export function ButtonShare({ qrcode }: { qrcode: RWS }) { + return ( + - - - + + + + - - - - + + + + + index + 2009) + .reverse()} + > + {(year) => ( + + )} + ); } @@ -43,25 +57,25 @@ function Button(props: ParentProps & { onClick: VoidFunction }) { ); } -function setTimeScale(days?: number) { - const to = new Date(); +function setTimeScale({ days, year }: { days?: number; year?: number }) { + let from = new Date(); + let to = new Date(); - if (days) { - const from = new Date(); + if (year) { + from = new Date(`${year}-01-01`); + to = new Date(`${year}-12-31`); + } else if (days) { from.setDate(from.getUTCDate() - days); - - chartState.chart?.timeScale().setVisibleRange({ - from: (from.getTime() / 1000) as Time, - to: (to.getTime() / 1000) as Time, - }); } else { - // chartState.chart?.timeScale().fitContent(); - chartState.chart?.timeScale().setVisibleRange({ - from: (new Date( - // datasets.candlesticks.values()?.[0]?.date || "", - GENESIS_DAY, - ).getTime() / 1000) as Time, - to: (to.getTime() / 1000) as Time, - }); + from = new Date(GENESIS_DAY); } + + setRange({ + from: (from.getTime() / 1000) as Time, + to: (to.getTime() / 1000) as Time, + }); +} + +function setRange(range: TimeRange) { + chartState.chart?.timeScale().setVisibleRange(range); } diff --git a/app/src/app/components/frames/chart/index.tsx b/app/src/app/components/frames/chart/index.tsx index aabf8cc12..b16d6ee4a 100644 --- a/app/src/app/components/frames/chart/index.tsx +++ b/app/src/app/components/frames/chart/index.tsx @@ -27,6 +27,10 @@ export function ChartFrame({ }) { const legend = createRWS([]); + const Chart = lazy(() => + import("./components/chart").then((d) => ({ default: d.Chart })), + ); + return (
@@ -56,7 +60,6 @@ export function ChartFrame({ diff --git a/app/src/app/components/frames/favorites.tsx b/app/src/app/components/frames/favorites.tsx index 32ba7ef62..9f40b348b 100644 --- a/app/src/app/components/frames/favorites.tsx +++ b/app/src/app/components/frames/favorites.tsx @@ -12,7 +12,9 @@ export function FavoritesFrame({ return (