diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx new file mode 100644 index 0000000..d3cb93b --- /dev/null +++ b/src/app/about/page.tsx @@ -0,0 +1,214 @@ +import Link from 'next/link' +import { BookOpen, TrendingUp, TrendingDown, Coins, Shuffle, RotateCcw, Building2, ExternalLink, Github } from 'lucide-react' + +export const metadata = { + title: 'About — HashEx', + description: 'How HashEx works: rules, features, and quirks of the hashtag stock market.', +} + +function Section({ title, icon: Icon, children }: { title: string; icon: React.ElementType; children: React.ReactNode }) { + return ( +
+
+ +

{title}

+
+ {children} +
+ ) +} + +function Rule({ label, children }: { label: string; children: React.ReactNode }) { + return ( +
+ {label} + {children} +
+ ) +} + +export default function AboutPage() { + return ( +
+ {/* Header */} +
+
+ +

About HashEx

+
+

+ HashEx is a stock-market simulation game where the "stocks" are Mastodon hashtags. + Prices update automatically based on real post activity. Start with{' '} + $2,000 and see how much you can grow it. +

+
+ + {/* Getting started */} +
+
+

+ Every new account starts with $2,000 in play money and{' '} + 1 research point. +

+

+ Use research points to unlock hashtags. Each point lets you search for a tag on Mastodon — if it has + activity, it gets added to the exchange with a live price. You earn more points each day based on your + account balance. +

+
+

Daily research points

+
+ Balance under $10k1 pt / day + $10k+2 pts / day + $100k+3 pts / day + $1M+5 pts / day +
+
+
+
+ + {/* Pricing */} +
+
+

+ Every hashtag has a price calculated from its post rate on Mastodon: +

+
+ price = max($0.25, posts_per_hour × $0.25) +
+

+ Prices update on a regular cycle. A hashtag that goes completely quiet for long enough will be + automatically deactivated — you'll get a warning on the + home page if any of your positions are at risk. Research it again to reactivate it. +

+
+
+ + {/* Trade types */} +
+
+ + Bet the price goes up. You buy shares and profit when the + price rises above your average buy price. + + + Close or reduce a long position. Profit = (current price − avg buy price) × shares. + + + Bet the price goes down. You put up collateral and profit when + the price falls below your entry. + + + Close a short. Profit = (avg entry − current price) × shares. If the price rose above your entry you + take a loss — and your balance can go negative. + +
+

+ All trades are validated server-side. You cannot buy more than your balance, sell more shares than you hold, + or trade a hashtag you haven't researched. +

+
+ + {/* Short selling specifics */} +
+
+

+ Shorts use a collateral model. When you buy short, the + cost is price × shares. When you + close, you receive back (2 × entry − current) × shares. +

+

+ This means losses are uncapped. If the price doubles, your + payout is zero. If it triples, your balance goes negative. +

+

+ A negative balance isn't game-over — you can still trade, but + your total portfolio value will show in red. You can reset your account at any time from your profile page. +

+
+
+ + {/* Hedge Funds */} +
+
+

+ Admins can create Hedge Funds — shared pools of capital + that multiple players can manage together. +

+

+ As a fund manager you trade on behalf of the fund by appending{' '} + ?fund=[slug] to any hashtag page + (there are quick links on the fund page). A banner confirms you're in Fund Mode. +

+

+ Outside investors can buy and sell fund shares from the + fund's page. The NAV (net asset value) per share is calculated live from the fund's total + portfolio. Fund investments show up in your Holdings and Trade History. +

+

+ Fund shares are stored to 6 decimal places. Fund accounts cannot sign in directly and do not earn + research points or play the lottery. +

+
+
+ + {/* Account reset */} +
+
+

+ You can reset your account from your profile page at any time. All positions are closed and your + balance returns to $2,000. +

+ + Your trade log is preserved. A{' '} + Donation entry is recorded if you were in profit, or a{' '} + Bankruptcy if you were in the red, followed by an{' '} + Account Open. + + + All trade records are deleted along with the reset. + +
+
+ + {/* Lucky Dip */} +
+

+ Once per day you can open the Lucky Dip lottery. Pick a box — most are empty, but a few hold cash prizes. + Winnings are added directly to your balance. +

+
+ + {/* Links */} +
+

Links

+
+ + + @ThaMunsta on Mastodon — questions, feedback, bug reports + + + + Source code — contribute or run your own instance + +
+
+ +
+ + ← Back to the exchange + +
+
+ ) +} diff --git a/src/app/icon.svg b/src/app/icon.svg new file mode 100644 index 0000000..c779d2c --- /dev/null +++ b/src/app/icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/app/page.tsx b/src/app/page.tsx index 2bc043d..964bbfb 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -102,7 +102,10 @@ export default async function HomePage() {

Trade hashtags like stocks. Prices are driven by real-time activity on Mastodon. - Research a tag to unlock it, then buy long or short. + Research a tag to unlock it, then buy long or short.{' '} + + Learn more → +

{session ? (