An idle clicker game set in a dystopian future where banana trees spawn Tani ghosts, and you must balance economic growth with supernatural threats.
QQT (A Quest to Conquer the Tanies) is a strategic idle game where you play as a member of a corporate coalition trying to manage banana plantations while preventing Tani ghost power from overwhelming humanity. The game combines resource management, economic simulation, and risk management mechanics.
- Resource Management: Manage money, banana trees, bananas, and land
- Dynamic Pricing: Banana prices fluctuate ±10% and decrease 20% per 100 bananas sold in 1 minute
- Price Recovery: Prices recover to base after 20 seconds of no sales
- Ghost Power System: Each banana tree increases Tani ghost power; magicians reduce it
- Magician System: Hire magicians to reduce ghost power, but they get expensive and may quit
- Land Management: Buy land to increase tree capacity (200 trees per rai)
- Relationship Diagram: D3.js visualization showing connections between Tani, Banana Trees, Magicians, Bananas, and Market
- Price Chart: Real-time stock-market-style chart with multiple time ranges (real-time, 1min, 5min, 10min, 1hour)
- Color-Coded Metrics: Red for increases, green for decreases, gray for neutral
- Help System: Contextual help modals with Info and Action tables
- Lore Section: Complete backstory explaining the game world
- LessWrong-style Design: Clean, minimalist serif typography with compact layout
- Node.js 18+
- pnpm (or npm/yarn)
# Install dependencies
pnpm install
# Run development server
pnpm dev
# Build for production
pnpm build
# Start production server
pnpm startThe game will be available at http://localhost:3000
- Money (Baht): Starting amount 1,000 ฿. Used to buy trees, land, and hire magicians
- Banana Trees: Cost 100 ฿ each. Each tree increases ghost power by 0.1% per second
- Bananas: Collected from trees (1 per tree). Sell for fluctuating prices
- Land (Rai): Cost 10,000 ฿ per rai. Each rai holds 200 trees
- Plant Banana Tree: Costs 100 ฿, takes 5 seconds
- Collect Bananas: Free, takes 2 seconds, collects 1 banana per tree
- Sell Bananas: Free, takes 1 second, price fluctuates based on market
- Cut Tree: Free, takes 3 seconds, resets ghost power to 0% (sacrifices 1 tree)
- Buy Land: Costs 10,000 ฿, increases capacity
- Hire Magician: Variable price (starts at 100 ฿), reduces ghost power by 0.5% per second
- Increases by 0.1% per second per tree
- Decreases by 0.5% per second per magician
- Game over at 80%
- Can be reset to 0% by cutting a tree
- Starting price: 100 ฿
- Price increases by 10 ฿ every 20 seconds
- May quit randomly after 1 minute (5% chance per second)
- Each magician reduces ghost power by 0.5% per second
- Base price: 5 ฿
- Fluctuates ±10% randomly
- Market impact: -20% per 100 bananas sold in the last minute
- Price recovery: Returns to base price 20 seconds after last sale
- Framework: Next.js 16
- React: 19.2.0
- Styling: Tailwind CSS 4
- Visualization: D3.js 7.9.0
- Language: JavaScript (ES6+)
QQT/
├── src/
│ ├── app/
│ │ ├── page.js # Main game page
│ │ ├── layout.js # Root layout
│ │ └── globals.css # Global styles
│ ├── components/
│ │ ├── HelpModal.js # Help modal component
│ │ ├── LoreModal.js # Lore/story modal
│ │ ├── TaniDiagram.js # Relationship diagram (D3)
│ │ └── BananaPriceChart.js # Price chart (D3)
│ ├── config/
│ │ └── gameConfig.js # Game configuration
│ ├── hooks/
│ │ └── useGameState.js # Main game state hook
│ ├── logic/
│ │ ├── gameLogic.js # Game calculations
│ │ └── conditions.js # Action conditions
│ └── utils/
│ ├── helpContent.js # Help content generator
│ └── modalPosition.js # Modal positioning utility
├── package.json
└── README.md
All game parameters can be adjusted in src/config/gameConfig.js:
- Economic settings (prices, costs)
- Time settings (action durations)
- Ghost power rates
- Magician settings
- Banana market parameters
- Uses ESLint with Next.js config
- Serif fonts throughout (Georgia, Times New Roman)
- LessWrong-inspired minimalist design
- Black and white color scheme with subtle grays
- useGameState: Custom hook managing all game state and logic
- gameLogic: Pure functions for calculations
- conditions: Action availability checks
- D3 Visualizations: Real-time relationship and price charts
Private project
Game concept and lore by the development team.
