commit 6809f234893f91c75095b0a1b01b53622524d84e
Author: root <root@hub.scroll.pub>
Date: 2024-12-27 05:26:58 +0000
Subject: Initial commit
diff --git a/body.html b/body.html
new file mode 100644
index 0000000..707b7d5
--- /dev/null
+++ b/body.html
@@ -0,0 +1,66 @@
+<header>
+ <nav class="main-nav">
+ <div class="logo">WealthTrack</div>
+ <button class="mobile-menu" aria-label="Toggle menu">☰</button>
+ <ul class="nav-links">
+ <li><a href="#dashboard">Dashboard</a></li>
+ <li><a href="#portfolio">Portfolio</a></li>
+ <li><a href="#analytics">Analytics</a></li>
+ </ul>
+ </nav>
+</header>
+
+<main>
+ <section id="dashboard" class="dashboard">
+ <h1>Portfolio Dashboard</h1>
+ <div class="portfolio-summary">
+ <div class="card total-value">
+ <h2>Total Value</h2>
+ <p class="amount">$0.00</p>
+ </div>
+ <div class="card daily-change">
+ <h2>Daily Change</h2>
+ <p class="amount">+$0.00</p>
+ </div>
+ </div>
+
+ <div class="portfolio-table">
+ <h2>Holdings</h2>
+ <div class="table-container">
+ <table>
+ <thead>
+ <tr>
+ <th>Symbol</th>
+ <th>Shares</th>
+ <th>Price</th>
+ <th>Value</th>
+ <th>Change</th>
+ </tr>
+ </thead>
+ <tbody id="holdings-body">
+ </tbody>
+ </table>
+ </div>
+ </div>
+
+ <div class="add-holding">
+ <h2>Add New Holding</h2>
+ <form id="add-holding-form">
+ <input type="text" id="symbol" placeholder="Symbol" required>
+ <input type="number" id="shares" placeholder="Number of shares" required>
+ <input type="number" id="price" placeholder="Purchase price" required>
+ <button type="submit">Add Holding</button>
+ </form>
+ </div>
+ </section>
+</main>
+
+<footer>
+ <nav>
+ <ul>
+ <li><a href="#terms">Terms</a></li>
+ <li><a href="#privacy">Privacy</a></li>
+ <li><a href="#contact">Contact</a></li>
+ </ul>
+ </nav>
+</footer>
diff --git a/index.scroll b/index.scroll
new file mode 100644
index 0000000..5fe6658
--- /dev/null
+++ b/index.scroll
@@ -0,0 +1,8 @@
+buildHtml
+baseUrl https://wealthtrack.scroll.pub
+metaTags
+editButton /edit.html
+title WealthTrack - Smart Portfolio Monitoring
+style.css
+body.html
+script.js
diff --git a/readme.scroll b/readme.scroll
new file mode 100644
index 0000000..898babf
--- /dev/null
+++ b/readme.scroll
@@ -0,0 +1,2 @@
+# wealthtrack.scroll.pub
+Website generated by Claude from prompt: Create a website that allows me to measure my portfolio of stocks and other financial instruments.
\ No newline at end of file
diff --git a/script.js b/script.js
new file mode 100644
index 0000000..6498c31
--- /dev/null
+++ b/script.js
@@ -0,0 +1,76 @@
+document.addEventListener('DOMContentLoaded', () => {
+ // Mobile menu toggle
+ const mobileMenu = document.querySelector('.mobile-menu');
+ const navLinks = document.querySelector('.nav-links');
+
+ mobileMenu.addEventListener('click', () => {
+ navLinks.classList.toggle('active');
+ });
+
+ // Sample portfolio data
+ let portfolio = [];
+
+ // Add holding form handler
+ const addHoldingForm = document.getElementById('add-holding-form');
+ addHoldingForm.addEventListener('submit', (e) => {
+ e.preventDefault();
+
+ const symbol = document.getElementById('symbol').value.toUpperCase();
+ const shares = parseFloat(document.getElementById('shares').value);
+ const price = parseFloat(document.getElementById('price').value);
+
+ addHolding(symbol, shares, price);
+ updatePortfolioDisplay();
+ addHoldingForm.reset();
+ });
+
+ function addHolding(symbol, shares, price) {
+ const holding = {
+ symbol,
+ shares,
+ price,
+ currentPrice: price, // In a real app, this would be fetched from an API
+ value: shares * price,
+ change: 0
+ };
+
+ portfolio.push(holding);
+ }
+
+ function updatePortfolioDisplay() {
+ const holdingsBody = document.getElementById('holdings-body');
+ const totalValue = portfolio.reduce((sum, holding) => sum + holding.value, 0);
+ const totalChange = portfolio.reduce((sum, holding) => sum + holding.change, 0);
+
+ // Update summary cards
+ document.querySelector('.total-value .amount').textContent =
+ formatCurrency(totalValue);
+ document.querySelector('.daily-change .amount').textContent =
+ formatCurrency(totalChange);
+
+ // Update holdings table
+ holdingsBody.innerHTML = portfolio.map(holding => `
+ <tr>
+ <td>${holding.symbol}</td>
+ <td>${holding.shares}</td>
+ <td>${formatCurrency(holding.currentPrice)}</td>
+ <td>${formatCurrency(holding.value)}</td>
+ <td class="${holding.change >= 0 ? 'success' : 'danger'}">
+ ${formatCurrency(holding.change)}
+ </td>
+ </tr>
+ `).join('');
+ }
+
+ function formatCurrency(amount) {
+ return new Intl.NumberFormat('en-US', {
+ style: 'currency',
+ currency: 'USD'
+ }).format(amount);
+ }
+
+ // Add some sample data
+ addHolding('AAPL', 10, 150.50);
+ addHolding('GOOGL', 5, 2750.25);
+ updatePortfolioDisplay();
+});
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..fe62bc6
--- /dev/null
+++ b/style.css
@@ -0,0 +1,202 @@
+:root {
+ --primary-color: #2c3e50;
+ --accent-color: #3498db;
+ --background-color: #f8f9fa;
+ --card-background: #ffffff;
+ --text-color: #2c3e50;
+ --success-color: #2ecc71;
+ --danger-color: #e74c3c;
+}
+
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+body {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ line-height: 1.6;
+ color: var(--text-color);
+ background: var(--background-color);
+}
+
+.main-nav {
+ background: var(--primary-color);
+ padding: 1rem;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ box-shadow: 0 2px 5px rgba(0,0,0,0.1);
+}
+
+.logo {
+ color: white;
+ font-size: 1.5rem;
+ font-weight: bold;
+}
+
+.nav-links {
+ display: flex;
+ list-style: none;
+ gap: 2rem;
+}
+
+.nav-links a {
+ color: white;
+ text-decoration: none;
+ transition: color 0.3s ease;
+}
+
+.nav-links a:hover {
+ color: var(--accent-color);
+}
+
+.mobile-menu {
+ display: none;
+ background: none;
+ border: none;
+ color: white;
+ font-size: 1.5rem;
+ cursor: pointer;
+}
+
+.dashboard {
+ max-width: 1200px;
+ margin: 2rem auto;
+ padding: 0 1rem;
+}
+
+.portfolio-summary {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+ gap: 1rem;
+ margin: 2rem 0;
+}
+
+.card {
+ background: var(--card-background);
+ padding: 1.5rem;
+ border-radius: 10px;
+ box-shadow: 0 4px 6px rgba(0,0,0,0.1);
+ transition: transform 0.3s ease;
+}
+
+.card:hover {
+ transform: translateY(-5px);
+}
+
+.card h2 {
+ font-size: 1rem;
+ color: var(--text-color);
+ margin-bottom: 0.5rem;
+}
+
+.amount {
+ font-size: 2rem;
+ font-weight: bold;
+ color: var(--primary-color);
+}
+
+.table-container {
+ overflow-x: auto;
+ background: var(--card-background);
+ border-radius: 10px;
+ box-shadow: 0 4px 6px rgba(0,0,0,0.1);
+ margin: 2rem 0;
+}
+
+table {
+ width: 100%;
+ border-collapse: collapse;
+}
+
+th, td {
+ padding: 1rem;
+ text-align: left;
+ border-bottom: 1px solid #eee;
+}
+
+th {
+ background: var(--primary-color);
+ color: white;
+}
+
+.add-holding {
+ background: var(--card-background);
+ padding: 2rem;
+ border-radius: 10px;
+ box-shadow: 0 4px 6px rgba(0,0,0,0.1);
+}
+
+form {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
+ gap: 1rem;
+ margin-top: 1rem;
+}
+
+input {
+ padding: 0.8rem;
+ border: 1px solid #ddd;
+ border-radius: 5px;
+ font-size: 1rem;
+}
+
+button {
+ background: var(--accent-color);
+ color: white;
+ border: none;
+ padding: 0.8rem;
+ border-radius: 5px;
+ cursor: pointer;
+ transition: background 0.3s ease;
+}
+
+button:hover {
+ background: #2980b9;
+}
+
+footer {
+ background: var(--primary-color);
+ color: white;
+ padding: 2rem;
+ margin-top: 4rem;
+}
+
+footer ul {
+ display: flex;
+ justify-content: center;
+ gap: 2rem;
+ list-style: none;
+}
+
+footer a {
+ color: white;
+ text-decoration: none;
+}
+
+@media (max-width: 768px) {
+ .mobile-menu {
+ display: block;
+ }
+
+ .nav-links {
+ display: none;
+ position: absolute;
+ top: 100%;
+ left: 0;
+ right: 0;
+ background: var(--primary-color);
+ flex-direction: column;
+ padding: 1rem;
+ }
+
+ .nav-links.active {
+ display: flex;
+ }
+
+ .portfolio-summary {
+ grid-template-columns: 1fr;
+ }
+}