feat: add strategy market, login overlay, and registration limit page

- Add public strategy market API endpoint (/api/strategies/public)
- Add is_public and config_visible fields to Strategy model
- Add LoginRequiredOverlay component for unified auth prompts
- Add WhitelistFullPage for registration capacity limit
- Add StrategyMarketPage for browsing public strategies
- Unify navigation logic across HeaderBar, LandingPage, App
- Reduce klines API calls (fetch once on mount)
- Fix various page transition issues
This commit is contained in:
tinkle-community
2026-01-01 23:05:58 +08:00
parent 4520b9ee88
commit 09117bb404
14 changed files with 1747 additions and 1540 deletions

View File

@@ -30,9 +30,13 @@ export default function FooterSection({ language }: FooterSectionProps) {
{ name: 'Pull Requests', href: 'https://github.com/NoFxAiOS/nofx/pulls' },
],
supporters: [
{ name: 'Binance', href: 'https://www.binance.com/join?ref=NOFXENG' },
{ name: 'Bybit', href: 'https://partner.bybit.com/b/83856' },
{ name: 'OKX', href: 'https://www.okx.com/join/1865360' },
{ name: 'Bitget', href: 'https://www.bitget.com/referral/register?from=referral&clacCode=c8a43172' },
{ name: 'Hyperliquid', href: 'https://app.hyperliquid.xyz/join/AITRADING' },
{ name: 'Aster DEX', href: 'https://www.asterdex.com/en/referral/fdfc0e' },
{ name: 'Binance', href: 'https://www.maxweb.red/join?ref=NOFXAI' },
{ name: 'Hyperliquid', href: 'https://hyperliquid.xyz/' },
{ name: 'Lighter', href: 'https://app.lighter.xyz/?referral=68151432' },
],
}
@@ -123,21 +127,20 @@ export default function FooterSection({ language }: FooterSectionProps) {
<h4 className="text-sm font-semibold mb-4" style={{ color: '#EAECEF' }}>
{t('supporters', language)}
</h4>
<ul className="space-y-3">
<div className="flex flex-wrap gap-2">
{links.supporters.map((link) => (
<li key={link.name}>
<a
href={link.href}
target="_blank"
rel="noopener noreferrer"
className="text-sm transition-colors hover:text-[#F0B90B]"
style={{ color: '#5E6673' }}
>
{link.name}
</a>
</li>
<a
key={link.name}
href={link.href}
target="_blank"
rel="noopener noreferrer"
className="text-xs border border-zinc-800 bg-zinc-900/50 rounded px-3 py-1.5 transition-all hover:border-[#F0B90B] hover:text-[#F0B90B] hover:bg-[#F0B90B]/10 hover:shadow-[0_0_10px_rgba(240,185,11,0.2)]"
style={{ color: '#848E9C' }}
>
{link.name}
</a>
))}
</ul>
</div>
</div>
</div>

View File

@@ -54,9 +54,8 @@ export default function TerminalHero() {
}
}
// Only fetch once on mount, cache the result
fetchPrices()
const interval = setInterval(fetchPrices, 5000)
return () => clearInterval(interval)
}, [])
return (