37 Commits

Author SHA1 Message Date
0bf48b2553 chore(deps): update actions/setup-node action to v5
All checks were successful
Lint / Lint and Typecheck (push) Successful in 26s
Lint / Lint and Typecheck (pull_request) Successful in 26s
2025-09-06 00:02:18 +00:00
4d09aba1ff fix(deps): update dependency lucide-react to ^0.542.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 26s
2025-08-30 05:01:39 +00:00
4c8b4bb4d5 chore(deps): update dependency typescript-eslint to v8.41.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 29s
2025-08-30 04:02:01 +00:00
18c7a5f2cb chore(deps): update dependency @types/node to v22.18.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 25s
2025-08-30 03:02:34 +00:00
7502069d16 fix(deps): update nextjs monorepo to v15.5.2
All checks were successful
Lint / Lint and Typecheck (push) Successful in 28s
2025-08-30 02:02:43 +00:00
45d57471d9 fix(deps): update dependency zod to v4.1.5
All checks were successful
Lint / Lint and Typecheck (push) Successful in 27s
2025-08-30 01:02:44 +00:00
9d23916eb2 chore(deps): update react monorepo
All checks were successful
Lint / Lint and Typecheck (push) Successful in 32s
2025-08-30 00:02:10 +00:00
47b5100611 fix(deps): update dependency zod to v4.1.1
All checks were successful
Lint / Lint and Typecheck (push) Successful in 28s
2025-08-24 07:01:14 +00:00
007353e2ab fix(deps): update dependency zod to v4.1.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 25s
2025-08-23 08:01:33 +00:00
d1fe3b29c3 fix(deps): update nextjs monorepo to v15.5.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 29s
2025-08-23 05:01:59 +00:00
a4ba1bdc67 fix(deps): update dependency lucide-react to ^0.541.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 25s
2025-08-23 04:02:19 +00:00
414eee9591 chore(deps): update pnpm to v10.15.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 29s
2025-08-23 03:02:24 +00:00
8e8652e2aa chore(deps): update dependency typescript-eslint to v8.40.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 26s
2025-08-23 02:02:48 +00:00
8d9b0e3792 chore(deps): update dependency eslint to v9.34.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 30s
2025-08-23 01:03:08 +00:00
0408287300 chore(deps): update dependency @types/react to v19.1.11
All checks were successful
Lint / Lint and Typecheck (push) Successful in 31s
2025-08-23 00:02:28 +00:00
bb30c066df chore(deps): update dependency tw-animate-css to v1.3.7
All checks were successful
Lint / Lint and Typecheck (push) Successful in 56s
2025-08-16 16:01:43 +00:00
fcf5caee46 fix(deps): update react monorepo
All checks were successful
Lint / Lint and Typecheck (push) Successful in 1m11s
2025-08-16 11:03:31 +00:00
de3a06384e fix(deps): update nextjs monorepo to v15.4.6
All checks were successful
Lint / Lint and Typecheck (push) Successful in 54s
2025-08-16 10:32:00 +00:00
cfb594ef15 fix(deps): update radix-ui-primitives monorepo
All checks were successful
Lint / Lint and Typecheck (push) Successful in 57s
2025-08-16 04:04:22 +00:00
cbdc49328a chore(deps): update tailwindcss monorepo to v4.1.12
All checks were successful
Lint / Lint and Typecheck (push) Successful in 57s
2025-08-16 03:04:43 +00:00
8dbc2c5de6 chore(deps): update dependency typescript-eslint to v8.39.1
All checks were successful
Lint / Lint and Typecheck (push) Successful in 54s
2025-08-16 02:05:17 +00:00
c3771f85e0 chore(deps): update dependency @types/node to v22.17.2
All checks were successful
Lint / Lint and Typecheck (push) Successful in 52s
2025-08-16 01:06:16 +00:00
1c68d65539 chore(deps): update actions/checkout digest to 08eba0b
All checks were successful
Lint / Lint and Typecheck (push) Successful in 51s
2025-08-16 00:04:28 +00:00
d58a5bb2bb fix(deps): update dependency zod to v4.0.17
All checks were successful
Lint / Lint and Typecheck (push) Successful in 49s
2025-08-09 18:02:49 +00:00
2740e57dd0 fix(deps): update dependency lucide-react to ^0.539.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 45s
2025-08-09 04:04:09 +00:00
e45c437015 chore(deps): update dependency typescript-eslint to v8.39.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 46s
2025-08-09 03:05:01 +00:00
033088185c chore(deps): update dependency eslint to v9.33.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 47s
2025-08-09 02:05:01 +00:00
9aa7a7e4a2 fix(deps): update dependency zod to v4.0.16
All checks were successful
Lint / Lint and Typecheck (push) Successful in 45s
2025-08-09 01:05:16 +00:00
02c87ec8bf chore(deps): update dependency @types/node to v22.17.1
All checks were successful
Lint / Lint and Typecheck (push) Successful in 50s
2025-08-09 00:04:00 +00:00
061942aa8e fix(deps): update dependency react-hook-form to v7.62.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 53s
2025-08-02 06:06:04 +00:00
5e4aca4ec2 fix(deps): update dependency lucide-react to ^0.536.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 48s
2025-08-02 05:06:01 +00:00
2451c43e73 chore(deps): update pnpm to v10.14.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 44s
2025-08-02 04:06:13 +00:00
bf75fe7b2b chore(deps): update dependency typescript to v5.9.2
All checks were successful
Lint / Lint and Typecheck (push) Successful in 43s
2025-08-02 03:09:20 +00:00
375e93ce59 chore(deps): update dependency @types/node to v22.17.0
All checks were successful
Lint / Lint and Typecheck (push) Successful in 43s
2025-08-02 02:16:41 +00:00
832e2cdd3d fix(deps): update dependency zod to v4.0.14
All checks were successful
Lint / Lint and Typecheck (push) Successful in 42s
2025-08-02 01:07:36 +00:00
16d4dd53a1 fix(deps): update dependency @hookform/resolvers to v5.2.1
All checks were successful
Lint / Lint and Typecheck (push) Successful in 42s
2025-08-02 00:05:33 +00:00
1936fdff56 FAQ json-ld
All checks were successful
Lint / Lint and Typecheck (push) Successful in 54s
2025-07-27 15:20:07 +02:00
4 changed files with 875 additions and 665 deletions

View File

@@ -13,13 +13,13 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4
- name: Install pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4
- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
with:
node-version: 22
cache: "pnpm"

View File

@@ -23,7 +23,7 @@
"@t3-oss/env-nextjs": "^0.13.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"lucide-react": "^0.526.0",
"lucide-react": "^0.542.0",
"next": "^15.4.1",
"next-plausible": "^3.12.4",
"react": "^19.0.0",
@@ -35,23 +35,23 @@
},
"devDependencies": {
"@eslint/eslintrc": "3.3.1",
"@tailwindcss/postcss": "4.1.11",
"@types/node": "22.16.5",
"@types/react": "19.1.8",
"@types/react-dom": "19.1.6",
"eslint": "9.32.0",
"eslint-config-next": "15.4.4",
"@tailwindcss/postcss": "4.1.12",
"@types/node": "22.18.0",
"@types/react": "19.1.12",
"@types/react-dom": "19.1.9",
"eslint": "9.34.0",
"eslint-config-next": "15.5.2",
"eslint-plugin-react-hooks": "5.2.0",
"postcss": "8.5.6",
"prettier": "3.6.2",
"prettier-plugin-tailwindcss": "0.6.14",
"tailwindcss": "4.1.11",
"tw-animate-css": "1.3.6",
"typescript": "5.8.3",
"typescript-eslint": "8.38.0"
"tailwindcss": "4.1.12",
"tw-animate-css": "1.3.7",
"typescript": "5.9.2",
"typescript-eslint": "8.41.0"
},
"ct3aMetadata": {
"initVersion": "7.39.3"
},
"packageManager": "pnpm@10.13.1"
"packageManager": "pnpm@10.15.0"
}

1452
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -10,6 +10,61 @@ import Footer from "./components/footer";
import BackgroundPattern from "./components/BackgroundPattern";
export default function HomePage() {
const faqData = {
"@context": "https://schema.org",
"@type": "FAQPage",
mainEntity: [
{
"@type": "Question",
name: "What methodology does this calculator use?",
acceptedAnswer: {
"@type": "Answer",
text: "We run a multi-year projection in two phases: 1. Accumulation: Your balance grows by CAGR and you add monthly savings. 2. Retirement: The balance continues compounding, but you withdraw an inflation-adjusted monthly allowance. The result: a precise estimate of the capital you'll have at retirement (your “FIRE Number”) and how long it will last until your chosen life expectancy.",
},
},
{
"@type": "Question",
name: "Why isn't this just the 4% rule?",
acceptedAnswer: {
"@type": "Answer",
text: "The 4% rule is a useful starting point (25× annual spending), but it assumes a fixed withdrawal rate with inflation adjustments and doesn't model ongoing savings or dynamic market returns. Our calculator simulates each year's growth, contributions, and inflation-indexed withdrawals to give you a tailored picture.",
},
},
{
"@type": "Question",
name: "How do I choose a realistic growth rate?",
acceptedAnswer: {
"@type": "Answer",
text: "Historically, a diversified portfolio of equities and bonds has returned around 7-10% per year before inflation. We recommend starting around 6-8% (net of fees), then running “what-if” scenarios—5% on the conservative side, 10% on the aggressive side—to see how they affect your timeline.",
},
},
{
"@type": "Question",
name: "How does inflation factor into my FIRE Number?",
acceptedAnswer: {
"@type": "Answer",
text: "Cost of living rises. To maintain today's lifestyle, your monthly allowance must grow each year by your inflation rate. This calculator automatically inflates your desired monthly spending and subtracts it from your portfolio during retirement, ensuring your FIRE Number keeps pace with rising expenses.",
},
},
{
"@type": "Question",
name: "Can I really retire early with FIRE?",
acceptedAnswer: {
"@type": "Answer",
text: "Early retirement is achievable with disciplined saving, smart investing, and realistic assumptions. This tool helps you set targets, visualize outcomes, and adjust inputs—so you can build confidence in your plan and make informed trade-offs between lifestyle, risk, and timeline.",
},
},
{
"@type": "Question",
name: "How should I use this calculator effectively?",
acceptedAnswer: {
"@type": "Answer",
text: "Start with your actual numbers (capital, savings, age). Set conservative - mid - aggressive growth rates to bound possibilities. Slide your retirement age to explore “early” vs. “traditional” scenarios. Review the chart—especially the reference lines—to see when you hit FI and how withdrawals impact your balance. Experiment with higher savings rates or lower target spending to accelerate your path.",
},
},
],
};
return (
<main className="text-primary-foreground to-destructive from-secondary flex min-h-screen flex-col items-center bg-gradient-to-b p-2">
<BackgroundPattern />
@@ -129,9 +184,14 @@ export default function HomePage() {
</section>
<section className="mb-12">
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(faqData) }}
/>
<h2 className="mb-4 text-3xl font-bold">
FIRE & Investing Frequently Asked Questions (FAQ)
</h2>
<Accordion type="single" collapsible className="w-full">
<AccordionItem value="item-1">
<AccordionTrigger className="text-xl font-semibold">