init
|
|
@ -0,0 +1,160 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>About — PorfolioJournal</title>
|
||||
<meta name="description" content="The story, values, and roadmap for PorfolioJournal.">
|
||||
<link rel="canonical" href="https://portfoliojournal.app/about.html">
|
||||
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="About — PorfolioJournal">
|
||||
<meta property="og:description" content="The story, values, and roadmap for PorfolioJournal.">
|
||||
<meta property="og:url" content="https://portfoliojournal.app/about.html">
|
||||
<meta property="og:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="About — PorfolioJournal">
|
||||
<meta name="twitter:description" content="The story, values, and roadmap for PorfolioJournal.">
|
||||
<meta name="twitter:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<link rel="icon" href="assets/icons/favicon.svg" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="assets/icons/apple-touch-icon.svg">
|
||||
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<script src="assets/js/config.js"></script>
|
||||
<script src="assets/js/main.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<a class="skip-link" href="#main">Skip to content</a>
|
||||
<header class="nav" role="banner">
|
||||
<div class="nav-inner">
|
||||
<a class="nav-logo" href="index.html" aria-label="PorfolioJournal home">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="nav-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#nav-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</a>
|
||||
<nav aria-label="Primary">
|
||||
<button class="mobile-menu-toggle" aria-label="Open navigation" aria-expanded="false"></button>
|
||||
<div class="nav-links">
|
||||
<a class="nav-link" href="index.html">Home</a>
|
||||
<a class="nav-link" href="privacy.html">Privacy</a>
|
||||
<a class="nav-link" href="terms.html">Terms</a>
|
||||
<a class="nav-link" href="support.html">Support</a>
|
||||
<a class="nav-link" href="about.html">About</a>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="nav-actions">
|
||||
<button class="theme-toggle" aria-label="Toggle theme"></button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main">
|
||||
<section class="page-header">
|
||||
<div class="container">
|
||||
<h1>About PorfolioJournal</h1>
|
||||
<p>We believe calm financial reflection builds better long-term decisions.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content">
|
||||
<div class="container">
|
||||
<div class="content-body">
|
||||
<h2>Our story</h2>
|
||||
<p>PorfolioJournal started with a simple idea: portfolio tracking should feel more like a thoughtful journal than a trading terminal. Monthly check-ins create space for reflection, helping investors learn from their decisions without the noise of daily volatility.</p>
|
||||
|
||||
<h2>Values</h2>
|
||||
<ul>
|
||||
<li><strong>Calm over noise:</strong> We encourage intentional, long-term habits.</li>
|
||||
<li><strong>Privacy by default:</strong> Your data stays on your device unless you choose to sync it.</li>
|
||||
<li><strong>Clarity first:</strong> Clear, readable insights beat complex dashboards.</li>
|
||||
<li><strong>Ownership:</strong> Export and control your data at any time.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Roadmap</h2>
|
||||
<div class="cards-grid">
|
||||
<div class="card">
|
||||
<h3>Next up</h3>
|
||||
<p>More goal templates, improved streak insights, and smarter check-in reminders.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>Later this year</h3>
|
||||
<p>Custom analytics dashboards, better forecasting, and richer portfolio summaries.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>Get in touch</h2>
|
||||
<p>Have ideas or feedback? Email us at <a href="mailto:support@portfoliojournal.app">support@portfoliojournal.app</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="footer-grid">
|
||||
<div class="footer-brand">
|
||||
<div class="footer-logo">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="footer-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#footer-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</div>
|
||||
<p>Calm, offline-first portfolio journaling for iOS.</p>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Product</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="index.html">Overview</a>
|
||||
<a class="footer-link" href="about.html">About</a>
|
||||
<a class="footer-link" href="changelog.html">Changelog</a>
|
||||
<a class="footer-link" href="status.html">Status</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Support</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="support.html">Support</a>
|
||||
<a class="footer-link" href="security.html">Security</a>
|
||||
<a class="footer-link" href="delete-data.html">Delete Data</a>
|
||||
<a class="footer-link" href="press-kit.html">Press Kit</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Legal</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="privacy.html">Privacy Policy</a>
|
||||
<a class="footer-link" href="terms.html">Terms</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-bottom">
|
||||
<div class="footer-copyright">© <span data-year></span> PorfolioJournal. All rights reserved.</div>
|
||||
<div class="footer-legal">
|
||||
<a href="privacy.html">Privacy</a>
|
||||
<a href="terms.html">Terms</a>
|
||||
<a href="support.html">Support</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="180" height="180" viewBox="0 0 180 180" role="img" aria-label="PorfolioJournal">
|
||||
<defs>
|
||||
<linearGradient id="pj-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"/>
|
||||
<stop offset="100%" stop-color="#764ba2"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="12" y="12" width="156" height="156" rx="36" fill="url(#pj-gradient)"/>
|
||||
<path d="M56 124c0-28 20-48 44-48s44 20 44 48" fill="none" stroke="white" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M64 74h72" fill="none" stroke="white" stroke-width="10" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 631 B |
|
|
@ -0,0 +1,11 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64" role="img" aria-label="PorfolioJournal">
|
||||
<defs>
|
||||
<linearGradient id="pj-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"/>
|
||||
<stop offset="100%" stop-color="#764ba2"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="4" y="4" width="56" height="56" rx="14" fill="url(#pj-gradient)"/>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 618 B |
|
|
@ -0,0 +1,13 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512" role="img" aria-label="PorfolioJournal app icon">
|
||||
<defs>
|
||||
<linearGradient id="pj-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"/>
|
||||
<stop offset="100%" stop-color="#764ba2"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="32" y="32" width="448" height="448" rx="96" fill="url(#pj-gradient)"/>
|
||||
<path d="M160 336c0-64 48-112 96-112s96 48 96 112" fill="none" stroke="white" stroke-width="28" stroke-linecap="round"/>
|
||||
<path d="M192 208h128" fill="none" stroke="white" stroke-width="28" stroke-linecap="round"/>
|
||||
<circle cx="208" cy="176" r="12" fill="white"/>
|
||||
<circle cx="304" cy="176" r="12" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 747 B |
|
|
@ -0,0 +1,14 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="630" viewBox="0 0 1200 630" role="img" aria-label="PorfolioJournal">
|
||||
<defs>
|
||||
<linearGradient id="pj-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"/>
|
||||
<stop offset="100%" stop-color="#764ba2"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect width="1200" height="630" fill="#f5f5f7"/>
|
||||
<rect x="96" y="96" width="144" height="144" rx="36" fill="url(#pj-gradient)"/>
|
||||
<path d="M130 190c0-26 20-46 46-46s46 20 46 46" fill="none" stroke="white" stroke-width="10" stroke-linecap="round"/>
|
||||
<path d="M138 138h72" fill="none" stroke="white" stroke-width="10" stroke-linecap="round"/>
|
||||
<text x="96" y="310" font-family="-apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Helvetica Neue', Arial, sans-serif" font-size="64" fill="#1d1d1f" font-weight="600">PorfolioJournal</text>
|
||||
<text x="96" y="380" font-family="-apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Helvetica Neue', Arial, sans-serif" font-size="32" fill="#6e6e73">Offline-first portfolio tracking with calm monthly check-ins.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
|
|
@ -0,0 +1,15 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="1800" viewBox="0 0 900 1800" role="img" aria-label="PorfolioJournal screenshot placeholder">
|
||||
<defs>
|
||||
<linearGradient id="pj-grad" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#f5f5f7"/>
|
||||
<stop offset="100%" stop-color="#ffffff"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect width="900" height="1800" rx="140" fill="url(#pj-grad)" stroke="#e5e5ea" stroke-width="8"/>
|
||||
<rect x="110" y="180" width="680" height="120" rx="36" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<rect x="110" y="340" width="680" height="220" rx="48" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<rect x="110" y="600" width="680" height="220" rx="48" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<rect x="110" y="860" width="680" height="220" rx="48" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<text x="110" y="140" font-family="-apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Helvetica Neue', Arial, sans-serif" font-size="40" fill="#6e6e73">Screenshot placeholder</text>
|
||||
<text x="110" y="1150" font-family="-apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Helvetica Neue', Arial, sans-serif" font-size="36" fill="#8e8e93">Replace with real app screens</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
|
|
@ -0,0 +1,15 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="1800" viewBox="0 0 900 1800" role="img" aria-label="PorfolioJournal screenshot placeholder">
|
||||
<defs>
|
||||
<linearGradient id="pj-grad" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#f5f5f7"/>
|
||||
<stop offset="100%" stop-color="#ffffff"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect width="900" height="1800" rx="140" fill="url(#pj-grad)" stroke="#e5e5ea" stroke-width="8"/>
|
||||
<rect x="110" y="180" width="680" height="120" rx="36" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<rect x="110" y="340" width="680" height="220" rx="48" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<rect x="110" y="600" width="680" height="220" rx="48" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<rect x="110" y="860" width="680" height="220" rx="48" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<text x="110" y="140" font-family="-apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Helvetica Neue', Arial, sans-serif" font-size="40" fill="#6e6e73">Screenshot placeholder</text>
|
||||
<text x="110" y="1150" font-family="-apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Helvetica Neue', Arial, sans-serif" font-size="36" fill="#8e8e93">Replace with real app screens</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
|
|
@ -0,0 +1,15 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="1800" viewBox="0 0 900 1800" role="img" aria-label="PorfolioJournal screenshot placeholder">
|
||||
<defs>
|
||||
<linearGradient id="pj-grad" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#f5f5f7"/>
|
||||
<stop offset="100%" stop-color="#ffffff"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect width="900" height="1800" rx="140" fill="url(#pj-grad)" stroke="#e5e5ea" stroke-width="8"/>
|
||||
<rect x="110" y="180" width="680" height="120" rx="36" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<rect x="110" y="340" width="680" height="220" rx="48" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<rect x="110" y="600" width="680" height="220" rx="48" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<rect x="110" y="860" width="680" height="220" rx="48" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<text x="110" y="140" font-family="-apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Helvetica Neue', Arial, sans-serif" font-size="40" fill="#6e6e73">Screenshot placeholder</text>
|
||||
<text x="110" y="1150" font-family="-apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Helvetica Neue', Arial, sans-serif" font-size="36" fill="#8e8e93">Replace with real app screens</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
|
|
@ -0,0 +1,15 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="1800" viewBox="0 0 900 1800" role="img" aria-label="PorfolioJournal screenshot placeholder">
|
||||
<defs>
|
||||
<linearGradient id="pj-grad" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#f5f5f7"/>
|
||||
<stop offset="100%" stop-color="#ffffff"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect width="900" height="1800" rx="140" fill="url(#pj-grad)" stroke="#e5e5ea" stroke-width="8"/>
|
||||
<rect x="110" y="180" width="680" height="120" rx="36" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<rect x="110" y="340" width="680" height="220" rx="48" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<rect x="110" y="600" width="680" height="220" rx="48" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<rect x="110" y="860" width="680" height="220" rx="48" fill="#ffffff" stroke="#e5e5ea"/>
|
||||
<text x="110" y="140" font-family="-apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Helvetica Neue', Arial, sans-serif" font-size="40" fill="#6e6e73">Screenshot placeholder</text>
|
||||
<text x="110" y="1150" font-family="-apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Helvetica Neue', Arial, sans-serif" font-size="36" fill="#8e8e93">Replace with real app screens</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
|
|
@ -0,0 +1,28 @@
|
|||
/**
|
||||
* PorfolioJournal Site Configuration
|
||||
* Edit these values to customize the site
|
||||
*/
|
||||
const CONFIG = {
|
||||
APP_NAME: 'PorfolioJournal',
|
||||
TAGLINE: 'Your personal portfolio, thoughtfully tracked.',
|
||||
DESCRIPTION: 'A calm, offline-first iOS app for tracking your portfolio with monthly check-ins, reflections, and long-term insights.',
|
||||
APP_STORE_URL: 'https://apps.apple.com/app/porfoliojournal/id000000000',
|
||||
SUPPORT_EMAIL: 'support@portfoliojournal.app',
|
||||
COMPANY_NAME: 'PorfolioJournal',
|
||||
WEBSITE_URL: 'https://portfoliojournal.app',
|
||||
EFFECTIVE_DATE: 'today',
|
||||
COPYRIGHT_YEAR: new Date().getFullYear(),
|
||||
ENABLE_ANALYTICS: false,
|
||||
ANALYTICS_ID: '', // Add your analytics ID if enabled
|
||||
|
||||
// Social links (optional)
|
||||
SOCIAL: {
|
||||
TWITTER: '',
|
||||
GITHUB: '',
|
||||
MASTODON: ''
|
||||
}
|
||||
};
|
||||
|
||||
// Freeze config to prevent accidental modifications
|
||||
Object.freeze(CONFIG);
|
||||
Object.freeze(CONFIG.SOCIAL);
|
||||
|
|
@ -0,0 +1,280 @@
|
|||
/**
|
||||
* PortfolioJournal Main JavaScript
|
||||
* Handles dark mode, navigation, and dynamic content
|
||||
*/
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
// Dark Mode Management
|
||||
const DarkMode = {
|
||||
STORAGE_KEY: 'pj-theme',
|
||||
|
||||
init() {
|
||||
const saved = localStorage.getItem(this.STORAGE_KEY);
|
||||
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
||||
|
||||
if (saved === 'dark' || (!saved && prefersDark)) {
|
||||
document.documentElement.setAttribute('data-theme', 'dark');
|
||||
} else {
|
||||
document.documentElement.setAttribute('data-theme', 'light');
|
||||
}
|
||||
|
||||
// Listen for system preference changes
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
|
||||
if (!localStorage.getItem(this.STORAGE_KEY)) {
|
||||
document.documentElement.setAttribute('data-theme', e.matches ? 'dark' : 'light');
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
toggle() {
|
||||
const current = document.documentElement.getAttribute('data-theme');
|
||||
const next = current === 'dark' ? 'light' : 'dark';
|
||||
document.documentElement.setAttribute('data-theme', next);
|
||||
localStorage.setItem(this.STORAGE_KEY, next);
|
||||
this.updateToggleButton();
|
||||
},
|
||||
|
||||
updateToggleButton() {
|
||||
const btn = document.querySelector('.theme-toggle');
|
||||
if (btn) {
|
||||
const isDark = document.documentElement.getAttribute('data-theme') === 'dark';
|
||||
btn.setAttribute('aria-label', isDark ? 'Switch to light mode' : 'Switch to dark mode');
|
||||
btn.innerHTML = isDark ? this.getSunIcon() : this.getMoonIcon();
|
||||
}
|
||||
},
|
||||
|
||||
getSunIcon() {
|
||||
return `<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><path d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"/></svg>`;
|
||||
},
|
||||
|
||||
getMoonIcon() {
|
||||
return `<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>`;
|
||||
}
|
||||
};
|
||||
|
||||
// Navigation Management
|
||||
const Navigation = {
|
||||
init() {
|
||||
this.setActiveLink();
|
||||
this.setupMobileMenu();
|
||||
this.setupKeyboardNav();
|
||||
},
|
||||
|
||||
setActiveLink() {
|
||||
const currentPath = window.location.pathname;
|
||||
const links = document.querySelectorAll('.nav-link');
|
||||
|
||||
links.forEach(link => {
|
||||
const href = link.getAttribute('href');
|
||||
const isActive = currentPath.endsWith(href) ||
|
||||
(href === 'index.html' && (currentPath === '/' || currentPath.endsWith('/')));
|
||||
|
||||
if (isActive) {
|
||||
link.classList.add('active');
|
||||
link.setAttribute('aria-current', 'page');
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
setupMobileMenu() {
|
||||
const toggle = document.querySelector('.mobile-menu-toggle');
|
||||
const nav = document.querySelector('.nav-links');
|
||||
|
||||
if (toggle && nav) {
|
||||
toggle.addEventListener('click', () => {
|
||||
const isOpen = nav.classList.toggle('open');
|
||||
toggle.setAttribute('aria-expanded', isOpen);
|
||||
toggle.innerHTML = isOpen ? this.getCloseIcon() : this.getMenuIcon();
|
||||
});
|
||||
|
||||
// Close menu on link click
|
||||
nav.querySelectorAll('a').forEach(link => {
|
||||
link.addEventListener('click', () => {
|
||||
nav.classList.remove('open');
|
||||
toggle.setAttribute('aria-expanded', 'false');
|
||||
toggle.innerHTML = this.getMenuIcon();
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
setupKeyboardNav() {
|
||||
document.addEventListener('keydown', (e) => {
|
||||
if (e.key === 'Escape') {
|
||||
const nav = document.querySelector('.nav-links');
|
||||
const toggle = document.querySelector('.mobile-menu-toggle');
|
||||
if (nav && nav.classList.contains('open')) {
|
||||
nav.classList.remove('open');
|
||||
toggle.setAttribute('aria-expanded', 'false');
|
||||
toggle.innerHTML = this.getMenuIcon();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
getMenuIcon() {
|
||||
return `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 12h18M3 6h18M3 18h18"/></svg>`;
|
||||
},
|
||||
|
||||
getCloseIcon() {
|
||||
return `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 6L6 18M6 6l12 12"/></svg>`;
|
||||
}
|
||||
};
|
||||
|
||||
// Dynamic Content
|
||||
const Content = {
|
||||
init() {
|
||||
this.insertYear();
|
||||
this.insertConfig();
|
||||
this.insertEffectiveDate();
|
||||
},
|
||||
|
||||
insertYear() {
|
||||
document.querySelectorAll('[data-year]').forEach(el => {
|
||||
el.textContent = CONFIG.COPYRIGHT_YEAR;
|
||||
});
|
||||
},
|
||||
|
||||
insertConfig() {
|
||||
document.querySelectorAll('[data-config]').forEach(el => {
|
||||
const key = el.getAttribute('data-config');
|
||||
if (CONFIG[key]) {
|
||||
if (el.tagName === 'A') {
|
||||
el.href = CONFIG[key];
|
||||
} else {
|
||||
el.textContent = CONFIG[key];
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
insertEffectiveDate() {
|
||||
document.querySelectorAll('[data-effective-date]').forEach(el => {
|
||||
const dateValue = CONFIG.EFFECTIVE_DATE === 'today' ? new Date() : new Date(CONFIG.EFFECTIVE_DATE);
|
||||
const date = Number.isNaN(dateValue.getTime()) ? new Date() : dateValue;
|
||||
el.textContent = date.toLocaleDateString('en-US', {
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric'
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Smooth Scroll
|
||||
const SmoothScroll = {
|
||||
init() {
|
||||
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
||||
anchor.addEventListener('click', (e) => {
|
||||
const targetId = anchor.getAttribute('href');
|
||||
if (targetId === '#') return;
|
||||
|
||||
const target = document.querySelector(targetId);
|
||||
if (target) {
|
||||
e.preventDefault();
|
||||
target.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
||||
target.focus({ preventScroll: true });
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Cookie Notice (only if analytics enabled)
|
||||
const CookieNotice = {
|
||||
STORAGE_KEY: 'pj-cookies-accepted',
|
||||
|
||||
init() {
|
||||
if (!CONFIG.ENABLE_ANALYTICS) return;
|
||||
if (localStorage.getItem(this.STORAGE_KEY)) return;
|
||||
|
||||
this.show();
|
||||
},
|
||||
|
||||
show() {
|
||||
const notice = document.createElement('div');
|
||||
notice.className = 'cookie-notice';
|
||||
notice.innerHTML = `
|
||||
<div class="cookie-notice-content">
|
||||
<p>We use analytics to improve your experience. No personal data is shared with third parties.</p>
|
||||
<div class="cookie-notice-actions">
|
||||
<button class="btn btn-small btn-secondary" onclick="CookieNotice.decline()">Decline</button>
|
||||
<button class="btn btn-small btn-primary" onclick="CookieNotice.accept()">Accept</button>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
document.body.appendChild(notice);
|
||||
},
|
||||
|
||||
accept() {
|
||||
localStorage.setItem(this.STORAGE_KEY, 'true');
|
||||
this.hide();
|
||||
// Initialize analytics here if needed
|
||||
},
|
||||
|
||||
decline() {
|
||||
localStorage.setItem(this.STORAGE_KEY, 'false');
|
||||
this.hide();
|
||||
},
|
||||
|
||||
hide() {
|
||||
const notice = document.querySelector('.cookie-notice');
|
||||
if (notice) notice.remove();
|
||||
}
|
||||
};
|
||||
|
||||
// FAQ Accordion
|
||||
const FAQ = {
|
||||
init() {
|
||||
document.querySelectorAll('.faq-question').forEach(question => {
|
||||
question.addEventListener('click', () => {
|
||||
const item = question.parentElement;
|
||||
const isOpen = item.classList.contains('open');
|
||||
|
||||
// Close all others
|
||||
document.querySelectorAll('.faq-item.open').forEach(openItem => {
|
||||
openItem.classList.remove('open');
|
||||
openItem.querySelector('.faq-question').setAttribute('aria-expanded', 'false');
|
||||
});
|
||||
|
||||
// Toggle current
|
||||
if (!isOpen) {
|
||||
item.classList.add('open');
|
||||
question.setAttribute('aria-expanded', 'true');
|
||||
}
|
||||
});
|
||||
|
||||
// Keyboard support
|
||||
question.addEventListener('keydown', (e) => {
|
||||
if (e.key === 'Enter' || e.key === ' ') {
|
||||
e.preventDefault();
|
||||
question.click();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Initialize everything on DOM ready
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
DarkMode.init();
|
||||
DarkMode.updateToggleButton();
|
||||
Navigation.init();
|
||||
Content.init();
|
||||
SmoothScroll.init();
|
||||
FAQ.init();
|
||||
CookieNotice.init();
|
||||
|
||||
// Setup theme toggle button
|
||||
const themeToggle = document.querySelector('.theme-toggle');
|
||||
if (themeToggle) {
|
||||
themeToggle.addEventListener('click', () => DarkMode.toggle());
|
||||
}
|
||||
});
|
||||
|
||||
// Expose necessary functions globally
|
||||
window.DarkMode = DarkMode;
|
||||
window.CookieNotice = CookieNotice;
|
||||
})();
|
||||
|
|
@ -0,0 +1,176 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Changelog — PorfolioJournal</title>
|
||||
<meta name="description" content="Latest updates and release notes for PorfolioJournal.">
|
||||
<link rel="canonical" href="https://portfoliojournal.app/changelog.html">
|
||||
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Changelog — PorfolioJournal">
|
||||
<meta property="og:description" content="Latest updates and release notes for PorfolioJournal.">
|
||||
<meta property="og:url" content="https://portfoliojournal.app/changelog.html">
|
||||
<meta property="og:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Changelog — PorfolioJournal">
|
||||
<meta name="twitter:description" content="Latest updates and release notes for PorfolioJournal.">
|
||||
<meta name="twitter:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<link rel="icon" href="assets/icons/favicon.svg" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="assets/icons/apple-touch-icon.svg">
|
||||
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<script src="assets/js/config.js"></script>
|
||||
<script src="assets/js/main.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<a class="skip-link" href="#main">Skip to content</a>
|
||||
<header class="nav" role="banner">
|
||||
<div class="nav-inner">
|
||||
<a class="nav-logo" href="index.html" aria-label="PorfolioJournal home">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="nav-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#nav-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</a>
|
||||
<nav aria-label="Primary">
|
||||
<button class="mobile-menu-toggle" aria-label="Open navigation" aria-expanded="false"></button>
|
||||
<div class="nav-links">
|
||||
<a class="nav-link" href="index.html">Home</a>
|
||||
<a class="nav-link" href="privacy.html">Privacy</a>
|
||||
<a class="nav-link" href="terms.html">Terms</a>
|
||||
<a class="nav-link" href="support.html">Support</a>
|
||||
<a class="nav-link" href="about.html">About</a>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="nav-actions">
|
||||
<button class="theme-toggle" aria-label="Toggle theme"></button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main">
|
||||
<section class="page-header">
|
||||
<div class="container">
|
||||
<h1>Changelog</h1>
|
||||
<p>Release notes and product updates for PorfolioJournal.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content">
|
||||
<div class="container">
|
||||
<div class="changelog-list">
|
||||
<article class="changelog-entry">
|
||||
<div class="changelog-header">
|
||||
<span class="changelog-version">v1.0.0</span>
|
||||
<span class="changelog-date">Jan 15, 2025</span>
|
||||
<span class="changelog-tag new">New</span>
|
||||
</div>
|
||||
<div class="changelog-body">
|
||||
<ul>
|
||||
<li>Initial release with monthly check-ins, snapshots, and goal tracking.</li>
|
||||
<li>Offline-first storage with optional iCloud sync.</li>
|
||||
<li>CSV and JSON export options.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</article>
|
||||
<article class="changelog-entry">
|
||||
<div class="changelog-header">
|
||||
<span class="changelog-version">v1.1.0</span>
|
||||
<span class="changelog-date">Feb 10, 2025</span>
|
||||
<span class="changelog-tag improved">Improved</span>
|
||||
</div>
|
||||
<div class="changelog-body">
|
||||
<ul>
|
||||
<li>New dashboard view with cashflow vs growth breakdown.</li>
|
||||
<li>Improved goal pacing indicators and streak tracking.</li>
|
||||
<li>Performance tuning for large portfolios.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</article>
|
||||
<article class="changelog-entry">
|
||||
<div class="changelog-header">
|
||||
<span class="changelog-version">v1.1.1</span>
|
||||
<span class="changelog-date">Mar 2, 2025</span>
|
||||
<span class="changelog-tag fixed">Fixed</span>
|
||||
</div>
|
||||
<div class="changelog-body">
|
||||
<ul>
|
||||
<li>Fixed export formatting for decimal separators.</li>
|
||||
<li>Resolved an issue with monthly reminder notifications.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="footer-grid">
|
||||
<div class="footer-brand">
|
||||
<div class="footer-logo">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="footer-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#footer-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</div>
|
||||
<p>Calm, offline-first portfolio journaling for iOS.</p>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Product</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="index.html">Overview</a>
|
||||
<a class="footer-link" href="about.html">About</a>
|
||||
<a class="footer-link" href="changelog.html">Changelog</a>
|
||||
<a class="footer-link" href="status.html">Status</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Support</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="support.html">Support</a>
|
||||
<a class="footer-link" href="security.html">Security</a>
|
||||
<a class="footer-link" href="delete-data.html">Delete Data</a>
|
||||
<a class="footer-link" href="press-kit.html">Press Kit</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Legal</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="privacy.html">Privacy Policy</a>
|
||||
<a class="footer-link" href="terms.html">Terms</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-bottom">
|
||||
<div class="footer-copyright">© <span data-year></span> PorfolioJournal. All rights reserved.</div>
|
||||
<div class="footer-legal">
|
||||
<a href="privacy.html">Privacy</a>
|
||||
<a href="terms.html">Terms</a>
|
||||
<a href="support.html">Support</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,155 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Delete Data — PorfolioJournal</title>
|
||||
<meta name="description" content="Instructions for deleting your PorfolioJournal data on device and iCloud.">
|
||||
<link rel="canonical" href="https://portfoliojournal.app/delete-data.html">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:title" content="Delete Data — PorfolioJournal">
|
||||
<meta property="og:description" content="Step-by-step instructions for deleting portfolio data.">
|
||||
<meta property="og:url" content="https://portfoliojournal.app/delete-data.html">
|
||||
<meta property="og:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Delete Data — PorfolioJournal">
|
||||
<meta name="twitter:description" content="Step-by-step instructions for deleting portfolio data.">
|
||||
<meta name="twitter:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<link rel="icon" href="assets/icons/favicon.svg" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="assets/icons/apple-touch-icon.svg">
|
||||
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<script src="assets/js/config.js"></script>
|
||||
<script src="assets/js/main.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<a class="skip-link" href="#main">Skip to content</a>
|
||||
<header class="nav" role="banner">
|
||||
<div class="nav-inner">
|
||||
<a class="nav-logo" href="index.html" aria-label="PorfolioJournal home">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="nav-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#nav-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</a>
|
||||
<nav aria-label="Primary">
|
||||
<button class="mobile-menu-toggle" aria-label="Open navigation" aria-expanded="false"></button>
|
||||
<div class="nav-links">
|
||||
<a class="nav-link" href="index.html">Home</a>
|
||||
<a class="nav-link" href="privacy.html">Privacy</a>
|
||||
<a class="nav-link" href="terms.html">Terms</a>
|
||||
<a class="nav-link" href="support.html">Support</a>
|
||||
<a class="nav-link" href="about.html">About</a>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="nav-actions">
|
||||
<button class="theme-toggle" aria-label="Toggle theme"></button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main">
|
||||
<section class="page-header">
|
||||
<div class="container">
|
||||
<h1>Delete your data</h1>
|
||||
<p>PorfolioJournal does not require an account. You control all local data.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content">
|
||||
<div class="container">
|
||||
<div class="content-body">
|
||||
<h2>Delete data on your device</h2>
|
||||
<ol class="steps-list">
|
||||
<li>Open PorfolioJournal on your iPhone or iPad.</li>
|
||||
<li>Go to Settings.</li>
|
||||
<li>Select “Delete All Data”.</li>
|
||||
<li>Confirm the deletion. This immediately removes local portfolio data and journal entries.</li>
|
||||
</ol>
|
||||
|
||||
<h2>Delete iCloud data (if enabled)</h2>
|
||||
<ol class="steps-list">
|
||||
<li>Open the app and disable iCloud sync in Settings.</li>
|
||||
<li>Open iOS Settings > Apple ID > iCloud > Manage Storage.</li>
|
||||
<li>Locate PorfolioJournal and delete its iCloud data.</li>
|
||||
</ol>
|
||||
|
||||
<h2>Account deletion</h2>
|
||||
<p>PorfolioJournal does not require an account. If an account system is introduced later, we will provide an in-app option to delete your account and associated data here.</p>
|
||||
|
||||
<h2>Need help?</h2>
|
||||
<p>If you need assistance, contact <a href="mailto:support@portfoliojournal.app">support@portfoliojournal.app</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="footer-grid">
|
||||
<div class="footer-brand">
|
||||
<div class="footer-logo">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="footer-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#footer-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</div>
|
||||
<p>Calm, offline-first portfolio journaling for iOS.</p>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Product</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="index.html">Overview</a>
|
||||
<a class="footer-link" href="about.html">About</a>
|
||||
<a class="footer-link" href="changelog.html">Changelog</a>
|
||||
<a class="footer-link" href="status.html">Status</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Support</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="support.html">Support</a>
|
||||
<a class="footer-link" href="security.html">Security</a>
|
||||
<a class="footer-link" href="delete-data.html">Delete Data</a>
|
||||
<a class="footer-link" href="press-kit.html">Press Kit</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Legal</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="privacy.html">Privacy Policy</a>
|
||||
<a class="footer-link" href="terms.html">Terms</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-bottom">
|
||||
<div class="footer-copyright">© <span data-year></span> PorfolioJournal. All rights reserved.</div>
|
||||
<div class="footer-legal">
|
||||
<a href="privacy.html">Privacy</a>
|
||||
<a href="terms.html">Terms</a>
|
||||
<a href="support.html">Support</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,375 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>PorfolioJournal — Calm portfolio journaling for iOS</title>
|
||||
<meta name="description" content="PorfolioJournal is a calm, offline-first iOS app for tracking your portfolio with monthly check-ins, reflections, and long-term insights.">
|
||||
<link rel="canonical" href="https://portfoliojournal.app/">
|
||||
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="PorfolioJournal">
|
||||
<meta property="og:description" content="Calm, offline-first portfolio tracking with monthly check-ins and reflections.">
|
||||
<meta property="og:url" content="https://portfoliojournal.app/">
|
||||
<meta property="og:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="PorfolioJournal">
|
||||
<meta name="twitter:description" content="Calm, offline-first portfolio tracking with monthly check-ins and reflections.">
|
||||
<meta name="twitter:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<link rel="icon" href="assets/icons/favicon.svg" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="assets/icons/apple-touch-icon.svg">
|
||||
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<script src="assets/js/config.js"></script>
|
||||
<script src="assets/js/main.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<a class="skip-link" href="#main">Skip to content</a>
|
||||
<header class="nav" role="banner">
|
||||
<div class="nav-inner">
|
||||
<a class="nav-logo" href="index.html" aria-label="PorfolioJournal home">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="nav-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#nav-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</a>
|
||||
<nav aria-label="Primary">
|
||||
<button class="mobile-menu-toggle" aria-label="Open navigation" aria-expanded="false"></button>
|
||||
<div class="nav-links">
|
||||
<a class="nav-link" href="index.html">Home</a>
|
||||
<a class="nav-link" href="privacy.html">Privacy</a>
|
||||
<a class="nav-link" href="terms.html">Terms</a>
|
||||
<a class="nav-link" href="support.html">Support</a>
|
||||
<a class="nav-link" href="about.html">About</a>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="nav-actions">
|
||||
<button class="theme-toggle" aria-label="Toggle theme"></button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main">
|
||||
<section class="hero">
|
||||
<div class="container">
|
||||
<div class="hero-content">
|
||||
<div class="hero-app-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="hero-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#hero-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="hero-badge">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
|
||||
<path d="M3 12l2-2 4 4 8-8 4 4"></path>
|
||||
</svg>
|
||||
Offline-first portfolio journaling
|
||||
</div>
|
||||
<h1 class="hero-title">Build a calm portfolio habit with <span class="hero-title-gradient">PorfolioJournal</span>.</h1>
|
||||
<p class="hero-description">A focused iOS app for monthly portfolio check-ins, reflection notes, and long-term clarity. Stay present, track growth, and build a record of your financial decisions without noise.</p>
|
||||
<div class="hero-actions">
|
||||
<a class="btn-appstore" href="https://apps.apple.com/app/porfoliojournal/id000000000" aria-label="Download on the App Store">
|
||||
<svg viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M16.365 12.586c.03 3.232 2.83 4.307 2.86 4.32-.02.076-.44 1.52-1.45 3.015-.88 1.292-1.79 2.58-3.23 2.607-1.42.027-1.88-.84-3.5-.84-1.62 0-2.13.814-3.47.866-1.39.053-2.45-1.4-3.34-2.687-1.82-2.64-3.21-7.47-1.34-10.73.93-1.62 2.6-2.65 4.41-2.68 1.38-.027 2.68.92 3.5.92.82 0 2.36-1.14 3.98-.97.68.03 2.58.27 3.8 2.04-.1.07-2.27 1.33-2.25 3.84zM13.7 3.55c.74-.9 1.24-2.15 1.1-3.4-1.07.04-2.37.7-3.14 1.6-.69.8-1.29 2.08-1.13 3.3 1.2.09 2.42-.61 3.17-1.5z"/></svg>
|
||||
<span class="btn-appstore-text">
|
||||
<span>Download on the</span>
|
||||
<span>App Store</span>
|
||||
</span>
|
||||
</a>
|
||||
<a class="btn btn-secondary" href="privacy.html">Read Privacy Policy</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section features">
|
||||
<div class="container">
|
||||
<div class="features-header">
|
||||
<h2>Portfolio clarity, without the noise</h2>
|
||||
<p>Everything PorfolioJournal does is built around gentle monthly updates and a durable record of your progress.</p>
|
||||
</div>
|
||||
<div class="features-grid">
|
||||
<article class="feature-card">
|
||||
<div class="feature-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 19h16M4 15h10M4 11h16M4 7h10"/></svg>
|
||||
</div>
|
||||
<h3>Monthly check-ins</h3>
|
||||
<p>Log updates once a month with mood, rating, notes, and progress streaks built in.</p>
|
||||
</article>
|
||||
<article class="feature-card">
|
||||
<div class="feature-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 3v18M5 12h14"/></svg>
|
||||
</div>
|
||||
<h3>Sources-based tracking</h3>
|
||||
<p>Track sources, snapshots, and category tags to keep allocations readable at a glance.</p>
|
||||
</article>
|
||||
<article class="feature-card">
|
||||
<div class="feature-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 12h6l3-7 3 14 3-7h3"/></svg>
|
||||
</div>
|
||||
<h3>Home dashboard</h3>
|
||||
<p>See total value, evolution, category mix, cashflow vs growth, and returns in one view.</p>
|
||||
</article>
|
||||
<article class="feature-card">
|
||||
<div class="feature-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M7 21h10M12 17V3"/></svg>
|
||||
</div>
|
||||
<h3>Goals tracking</h3>
|
||||
<p>Set targets with pace status, ETA, and shareable goal cards to stay motivated.</p>
|
||||
</article>
|
||||
<article class="feature-card">
|
||||
<div class="feature-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 4h16v16H4z"/><path d="M8 8h8v8H8z"/></svg>
|
||||
</div>
|
||||
<h3>Import & export</h3>
|
||||
<p>Move data in or out with CSV/JSON for long-term continuity and peace of mind.</p>
|
||||
</article>
|
||||
<article class="feature-card">
|
||||
<div class="premium-badge">Premium</div>
|
||||
<div class="feature-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
</div>
|
||||
<h3>Advanced analytics</h3>
|
||||
<p>Allocation, risk/return, drawdown, volatility, cashflow, and 12‑month forecasting.</p>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section screenshots">
|
||||
<div class="container">
|
||||
<div class="screenshots-header">
|
||||
<h2>Designed for calm focus</h2>
|
||||
<p>Every screen is built to reduce noise and help you reflect on what matters most.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="screenshots-gallery" aria-label="App screenshots">
|
||||
<div class="screenshot-item">
|
||||
<picture>
|
||||
<img class="screenshot-frame" src="assets/images/screenshots/screen-1.svg" alt="Portfolio dashboard placeholder" loading="lazy">
|
||||
</picture>
|
||||
</div>
|
||||
<div class="screenshot-item">
|
||||
<picture>
|
||||
<img class="screenshot-frame" src="assets/images/screenshots/screen-2.svg" alt="Monthly check-in placeholder" loading="lazy">
|
||||
</picture>
|
||||
</div>
|
||||
<div class="screenshot-item">
|
||||
<picture>
|
||||
<img class="screenshot-frame" src="assets/images/screenshots/screen-3.svg" alt="Goals tracking placeholder" loading="lazy">
|
||||
</picture>
|
||||
</div>
|
||||
<div class="screenshot-item">
|
||||
<picture>
|
||||
<img class="screenshot-frame" src="assets/images/screenshots/screen-4.svg" alt="Analytics placeholder" loading="lazy">
|
||||
</picture>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section ios-features">
|
||||
<div class="container">
|
||||
<div class="ios-features-header">
|
||||
<h2>Built for iOS, built for privacy</h2>
|
||||
<p>PorfolioJournal keeps your data on-device by default, with optional iCloud sync when you choose it.</p>
|
||||
</div>
|
||||
<div class="ios-features-grid">
|
||||
<div class="ios-feature">
|
||||
<div class="ios-feature-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 12l2-2 4 4 8-8 4 4"/></svg>
|
||||
</div>
|
||||
<h4>Offline-first</h4>
|
||||
<p>Full portfolio history stays on your device, even when you are off the grid.</p>
|
||||
</div>
|
||||
<div class="ios-feature">
|
||||
<div class="ios-feature-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M5 12h14M12 5v14"/></svg>
|
||||
</div>
|
||||
<h4>iCloud sync</h4>
|
||||
<p>Opt-in sync keeps data consistent across devices when you enable it.</p>
|
||||
</div>
|
||||
<div class="ios-feature">
|
||||
<div class="ios-feature-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 3l7 4v5c0 5-3 9-7 9s-7-4-7-9V7l7-4z"/></svg>
|
||||
</div>
|
||||
<h4>Face ID ready</h4>
|
||||
<p>Use device-level protections and optional passcode locks for peace of mind.</p>
|
||||
</div>
|
||||
<div class="ios-feature">
|
||||
<div class="ios-feature-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 4h16v16H4z"/><path d="M8 8h8v8H8z"/></svg>
|
||||
</div>
|
||||
<h4>Widgets</h4>
|
||||
<p>Track your total value at a glance with iOS widgets.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section testimonials">
|
||||
<div class="container">
|
||||
<div class="testimonials-header">
|
||||
<h2>Trusted by calm investors</h2>
|
||||
<p>Replace these with real reviews once you launch.</p>
|
||||
</div>
|
||||
<div class="testimonials-grid">
|
||||
<article class="testimonial-card">
|
||||
<div class="testimonial-stars" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
</div>
|
||||
<p class="testimonial-text">“Finally, a portfolio app that feels like a journal. The monthly cadence keeps me grounded.”</p>
|
||||
<p class="testimonial-author">— Placeholder Investor</p>
|
||||
</article>
|
||||
<article class="testimonial-card">
|
||||
<div class="testimonial-stars" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
</div>
|
||||
<p class="testimonial-text">“Offline-first is a game changer. I can keep sensitive notes without worrying about servers.”</p>
|
||||
<p class="testimonial-author">— Placeholder Reviewer</p>
|
||||
</article>
|
||||
<article class="testimonial-card">
|
||||
<div class="testimonial-stars" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2l3 7h7l-5.5 4 2.5 7-7-4-7 4 2.5-7L2 9h7z"/></svg>
|
||||
</div>
|
||||
<p class="testimonial-text">“The goals and snapshots make it easy to explain my progress over time.”</p>
|
||||
<p class="testimonial-author">— Placeholder Client</p>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section faq">
|
||||
<div class="container">
|
||||
<div class="faq-header">
|
||||
<h2>Questions, answered</h2>
|
||||
<p>Clear answers for iOS users who care about privacy and long-term tracking.</p>
|
||||
</div>
|
||||
<div class="faq-list">
|
||||
<div class="faq-item">
|
||||
<button class="faq-question" aria-expanded="false">Does PorfolioJournal work offline?</button>
|
||||
<div class="faq-answer">
|
||||
<div class="faq-answer-inner">Yes. All portfolio data and journal entries are stored locally by default, so you can update anywhere.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="faq-item">
|
||||
<button class="faq-question" aria-expanded="false">Is iCloud sync required?</button>
|
||||
<div class="faq-answer">
|
||||
<div class="faq-answer-inner">No. iCloud is optional. Enable it only if you want to sync across devices.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="faq-item">
|
||||
<button class="faq-question" aria-expanded="false">Can I export my data?</button>
|
||||
<div class="faq-answer">
|
||||
<div class="faq-answer-inner">Yes. Export CSV or JSON anytime for backup or migration.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="faq-item">
|
||||
<button class="faq-question" aria-expanded="false">Do you track me?</button>
|
||||
<div class="faq-answer">
|
||||
<div class="faq-answer-inner">No analytics or tracking is enabled by default. If analytics are added later, you will be notified.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section cta">
|
||||
<div class="container">
|
||||
<div class="cta-content">
|
||||
<h2>Start your calm portfolio habit</h2>
|
||||
<p>Download PorfolioJournal and build a record of your investing journey that you will actually want to revisit.</p>
|
||||
<div class="cta-actions">
|
||||
<a class="btn btn-primary btn-lg" href="https://apps.apple.com/app/porfoliojournal/id000000000">Download on the App Store</a>
|
||||
<a class="btn btn-secondary btn-lg" href="support.html">Contact Support</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="footer-grid">
|
||||
<div class="footer-brand">
|
||||
<div class="footer-logo">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="footer-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#footer-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</div>
|
||||
<p>Calm, offline-first portfolio journaling for iOS.</p>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Product</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="index.html">Overview</a>
|
||||
<a class="footer-link" href="about.html">About</a>
|
||||
<a class="footer-link" href="changelog.html">Changelog</a>
|
||||
<a class="footer-link" href="status.html">Status</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Support</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="support.html">Support</a>
|
||||
<a class="footer-link" href="security.html">Security</a>
|
||||
<a class="footer-link" href="delete-data.html">Delete Data</a>
|
||||
<a class="footer-link" href="press-kit.html">Press Kit</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Legal</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="privacy.html">Privacy Policy</a>
|
||||
<a class="footer-link" href="terms.html">Terms</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-bottom">
|
||||
<div class="footer-copyright">© <span data-year></span> PorfolioJournal. All rights reserved.</div>
|
||||
<div class="footer-legal">
|
||||
<a href="privacy.html">Privacy</a>
|
||||
<a href="terms.html">Terms</a>
|
||||
<a href="support.html">Support</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,202 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Press Kit — PorfolioJournal</title>
|
||||
<meta name="description" content="Press kit for PorfolioJournal with app description, icons, screenshots, and brand guidelines.">
|
||||
<link rel="canonical" href="https://portfoliojournal.app/press-kit.html">
|
||||
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Press Kit — PorfolioJournal">
|
||||
<meta property="og:description" content="App description, icon placeholders, screenshots, and brand guidelines.">
|
||||
<meta property="og:url" content="https://portfoliojournal.app/press-kit.html">
|
||||
<meta property="og:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Press Kit — PorfolioJournal">
|
||||
<meta name="twitter:description" content="App description, icon placeholders, screenshots, and brand guidelines.">
|
||||
<meta name="twitter:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<link rel="icon" href="assets/icons/favicon.svg" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="assets/icons/apple-touch-icon.svg">
|
||||
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<script src="assets/js/config.js"></script>
|
||||
<script src="assets/js/main.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<a class="skip-link" href="#main">Skip to content</a>
|
||||
<header class="nav" role="banner">
|
||||
<div class="nav-inner">
|
||||
<a class="nav-logo" href="index.html" aria-label="PorfolioJournal home">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="nav-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#nav-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</a>
|
||||
<nav aria-label="Primary">
|
||||
<button class="mobile-menu-toggle" aria-label="Open navigation" aria-expanded="false"></button>
|
||||
<div class="nav-links">
|
||||
<a class="nav-link" href="index.html">Home</a>
|
||||
<a class="nav-link" href="privacy.html">Privacy</a>
|
||||
<a class="nav-link" href="terms.html">Terms</a>
|
||||
<a class="nav-link" href="support.html">Support</a>
|
||||
<a class="nav-link" href="about.html">About</a>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="nav-actions">
|
||||
<button class="theme-toggle" aria-label="Toggle theme"></button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main">
|
||||
<section class="page-header">
|
||||
<div class="container">
|
||||
<h1>Press kit</h1>
|
||||
<p>Everything you need to write about PorfolioJournal in one place.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content">
|
||||
<div class="container">
|
||||
<div class="content-body">
|
||||
<h2>App description</h2>
|
||||
<p>PorfolioJournal is an offline-first iOS app that helps investors build a long-term portfolio record through calm monthly check-ins, reflection notes, and clear allocation snapshots. It combines a focused journal with lightweight analytics, so users can track growth without the noise of day-to-day market swings.</p>
|
||||
|
||||
<h2>Download assets</h2>
|
||||
<div class="cards-grid">
|
||||
<div class="card">
|
||||
<div class="card-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 5v14M5 12h14"/></svg>
|
||||
</div>
|
||||
<h3>App icon</h3>
|
||||
<p>SVG placeholder for media kits and previews.</p>
|
||||
<a class="btn btn-secondary" href="assets/images/app-icon.svg">Download SVG</a>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 5h16v14H4z"/><path d="M4 15l4-4 4 4 4-4 4 4"/></svg>
|
||||
</div>
|
||||
<h3>Screenshots</h3>
|
||||
<p>Replace with actual iOS screenshots when available.</p>
|
||||
<a class="btn btn-secondary" href="assets/images/screenshots/screen-1.svg">Download sample</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>App icons</h2>
|
||||
<div class="icon-grid">
|
||||
<div class="icon-item">
|
||||
<img src="assets/images/app-icon.svg" alt="PorfolioJournal app icon">
|
||||
<span>App Icon (SVG)</span>
|
||||
</div>
|
||||
<div class="icon-item">
|
||||
<img src="assets/icons/favicon.svg" alt="PorfolioJournal favicon">
|
||||
<span>Favicon (SVG)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>Screenshots</h2>
|
||||
<div class="icon-grid">
|
||||
<div class="icon-item">
|
||||
<img src="assets/images/screenshots/screen-1.svg" alt="Screenshot placeholder 1">
|
||||
<span>Dashboard</span>
|
||||
</div>
|
||||
<div class="icon-item">
|
||||
<img src="assets/images/screenshots/screen-2.svg" alt="Screenshot placeholder 2">
|
||||
<span>Monthly check-in</span>
|
||||
</div>
|
||||
<div class="icon-item">
|
||||
<img src="assets/images/screenshots/screen-3.svg" alt="Screenshot placeholder 3">
|
||||
<span>Goals</span>
|
||||
</div>
|
||||
<div class="icon-item">
|
||||
<img src="assets/images/screenshots/screen-4.svg" alt="Screenshot placeholder 4">
|
||||
<span>Analytics</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>Brand guidelines</h2>
|
||||
<p>Use clean typography, generous spacing, and calm gradients. Avoid clutter. The product should feel deliberate and trustworthy.</p>
|
||||
|
||||
<div class="brand-colors">
|
||||
<div class="color-swatch" style="background:#667eea">#667EEA</div>
|
||||
<div class="color-swatch" style="background:#764ba2">#764BA2</div>
|
||||
<div class="color-swatch" style="background:#0071e3">#0071E3</div>
|
||||
<div class="color-swatch" style="background:#34c759">#34C759</div>
|
||||
</div>
|
||||
|
||||
<h2>Press contact</h2>
|
||||
<p>For media inquiries, reach us at <a href="mailto:press@portfoliojournal.app">press@portfoliojournal.app</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="footer-grid">
|
||||
<div class="footer-brand">
|
||||
<div class="footer-logo">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="footer-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#footer-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</div>
|
||||
<p>Calm, offline-first portfolio journaling for iOS.</p>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Product</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="index.html">Overview</a>
|
||||
<a class="footer-link" href="about.html">About</a>
|
||||
<a class="footer-link" href="changelog.html">Changelog</a>
|
||||
<a class="footer-link" href="status.html">Status</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Support</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="support.html">Support</a>
|
||||
<a class="footer-link" href="security.html">Security</a>
|
||||
<a class="footer-link" href="delete-data.html">Delete Data</a>
|
||||
<a class="footer-link" href="press-kit.html">Press Kit</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Legal</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="privacy.html">Privacy Policy</a>
|
||||
<a class="footer-link" href="terms.html">Terms</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-bottom">
|
||||
<div class="footer-copyright">© <span data-year></span> PorfolioJournal. All rights reserved.</div>
|
||||
<div class="footer-legal">
|
||||
<a href="privacy.html">Privacy</a>
|
||||
<a href="terms.html">Terms</a>
|
||||
<a href="support.html">Support</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,179 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Privacy Policy — PorfolioJournal</title>
|
||||
<meta name="description" content="PorfolioJournal privacy policy explaining data handling, storage, and deletion options.">
|
||||
<link rel="canonical" href="https://portfoliojournal.app/privacy.html">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:title" content="Privacy Policy — PorfolioJournal">
|
||||
<meta property="og:description" content="How PorfolioJournal handles your data, iCloud sync, and deletion requests.">
|
||||
<meta property="og:url" content="https://portfoliojournal.app/privacy.html">
|
||||
<meta property="og:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Privacy Policy — PorfolioJournal">
|
||||
<meta name="twitter:description" content="How PorfolioJournal handles your data, iCloud sync, and deletion requests.">
|
||||
<meta name="twitter:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<link rel="icon" href="assets/icons/favicon.svg" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="assets/icons/apple-touch-icon.svg">
|
||||
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<script src="assets/js/config.js"></script>
|
||||
<script src="assets/js/main.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<a class="skip-link" href="#main">Skip to content</a>
|
||||
<header class="nav" role="banner">
|
||||
<div class="nav-inner">
|
||||
<a class="nav-logo" href="index.html" aria-label="PorfolioJournal home">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="nav-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#nav-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</a>
|
||||
<nav aria-label="Primary">
|
||||
<button class="mobile-menu-toggle" aria-label="Open navigation" aria-expanded="false"></button>
|
||||
<div class="nav-links">
|
||||
<a class="nav-link" href="index.html">Home</a>
|
||||
<a class="nav-link" href="privacy.html">Privacy</a>
|
||||
<a class="nav-link" href="terms.html">Terms</a>
|
||||
<a class="nav-link" href="support.html">Support</a>
|
||||
<a class="nav-link" href="about.html">About</a>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="nav-actions">
|
||||
<button class="theme-toggle" aria-label="Toggle theme"></button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main">
|
||||
<section class="page-header">
|
||||
<div class="container">
|
||||
<h1>Privacy Policy</h1>
|
||||
<p>PorfolioJournal is designed to keep your portfolio data private by default.</p>
|
||||
<div class="page-header-meta">
|
||||
<span>Effective date: <strong data-effective-date></strong></span>
|
||||
<span>Applies to iOS app and this website</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content">
|
||||
<div class="container">
|
||||
<div class="content-body">
|
||||
<div class="summary-box">
|
||||
<h3>Privacy summary</h3>
|
||||
<ul>
|
||||
<li>Your portfolio data and journal notes stay on your device by default.</li>
|
||||
<li>iCloud sync is optional and only enabled by you.</li>
|
||||
<li>No advertising trackers, and no data sold or shared.</li>
|
||||
<li>Exports are initiated by you and saved where you choose.</li>
|
||||
<li>Deletion is instant inside the app, with additional steps for iCloud.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<h2>What data we collect</h2>
|
||||
<p>PorfolioJournal collects the data you choose to enter into the app, such as portfolio sources, snapshots, contributions, categories, goals, and journal notes. This information is stored locally on your device unless you enable iCloud sync or export your data.</p>
|
||||
|
||||
<h2>How we use your data</h2>
|
||||
<p>Your data is used solely to provide app functionality: portfolio calculations, charts, progress tracking, and reminders. We do not use your data for advertising or profiling.</p>
|
||||
|
||||
<h2>Data storage and sync</h2>
|
||||
<p>By default, all content is stored on-device. If you enable iCloud sync, your data is stored in your iCloud account and synced across devices signed in with the same Apple ID. PorfolioJournal does not operate separate servers for user data.</p>
|
||||
|
||||
<h2>Exports</h2>
|
||||
<p>You can export your data in CSV or JSON format at any time. Exported files are stored wherever you choose (Files app, local storage, or another provider you control).</p>
|
||||
|
||||
<h2>Third-party services</h2>
|
||||
<p>PorfolioJournal does not use third-party analytics or advertising services by default.</p>
|
||||
<div class="info-box">
|
||||
<p><strong>Placeholder:</strong> If you later enable analytics or external services, list them here with links to their privacy policies and the exact data shared.</p>
|
||||
</div>
|
||||
|
||||
<h2>Data retention</h2>
|
||||
<p>Your data is retained on your device until you delete it. If you enable iCloud, data is retained in your iCloud account until you delete it from the app or remove it in iCloud settings.</p>
|
||||
|
||||
<h2>Deleting your data</h2>
|
||||
<p>You can delete your portfolio data at any time from within the app. For iCloud data removal, follow the steps on the <a href="delete-data.html">Delete Data</a> page.</p>
|
||||
|
||||
<h2>Children's privacy</h2>
|
||||
<p>PorfolioJournal is not directed to children under 13 and does not knowingly collect personal data from children.</p>
|
||||
|
||||
<h2>Contact</h2>
|
||||
<p>If you have any questions about this policy or a data deletion request, contact us at <a href="mailto:support@portfoliojournal.app">support@portfoliojournal.app</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="footer-grid">
|
||||
<div class="footer-brand">
|
||||
<div class="footer-logo">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="footer-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#footer-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</div>
|
||||
<p>Calm, offline-first portfolio journaling for iOS.</p>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Product</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="index.html">Overview</a>
|
||||
<a class="footer-link" href="about.html">About</a>
|
||||
<a class="footer-link" href="changelog.html">Changelog</a>
|
||||
<a class="footer-link" href="status.html">Status</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Support</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="support.html">Support</a>
|
||||
<a class="footer-link" href="security.html">Security</a>
|
||||
<a class="footer-link" href="delete-data.html">Delete Data</a>
|
||||
<a class="footer-link" href="press-kit.html">Press Kit</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Legal</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="privacy.html">Privacy Policy</a>
|
||||
<a class="footer-link" href="terms.html">Terms</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-bottom">
|
||||
<div class="footer-copyright">© <span data-year></span> PorfolioJournal. All rights reserved.</div>
|
||||
<div class="footer-legal">
|
||||
<a href="privacy.html">Privacy</a>
|
||||
<a href="terms.html">Terms</a>
|
||||
<a href="support.html">Support</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
Sitemap: https://portfoliojournal.app/sitemap.xml
|
||||
|
|
@ -0,0 +1,157 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Security — PorfolioJournal</title>
|
||||
<meta name="description" content="Security and data protection details for PorfolioJournal, including on-device storage and iCloud sync.">
|
||||
<link rel="canonical" href="https://portfoliojournal.app/security.html">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:title" content="Security — PorfolioJournal">
|
||||
<meta property="og:description" content="Learn how PorfolioJournal secures your portfolio data.">
|
||||
<meta property="og:url" content="https://portfoliojournal.app/security.html">
|
||||
<meta property="og:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Security — PorfolioJournal">
|
||||
<meta name="twitter:description" content="Learn how PorfolioJournal secures your portfolio data.">
|
||||
<meta name="twitter:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<link rel="icon" href="assets/icons/favicon.svg" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="assets/icons/apple-touch-icon.svg">
|
||||
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<script src="assets/js/config.js"></script>
|
||||
<script src="assets/js/main.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<a class="skip-link" href="#main">Skip to content</a>
|
||||
<header class="nav" role="banner">
|
||||
<div class="nav-inner">
|
||||
<a class="nav-logo" href="index.html" aria-label="PorfolioJournal home">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="nav-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#nav-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</a>
|
||||
<nav aria-label="Primary">
|
||||
<button class="mobile-menu-toggle" aria-label="Open navigation" aria-expanded="false"></button>
|
||||
<div class="nav-links">
|
||||
<a class="nav-link" href="index.html">Home</a>
|
||||
<a class="nav-link" href="privacy.html">Privacy</a>
|
||||
<a class="nav-link" href="terms.html">Terms</a>
|
||||
<a class="nav-link" href="support.html">Support</a>
|
||||
<a class="nav-link" href="about.html">About</a>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="nav-actions">
|
||||
<button class="theme-toggle" aria-label="Toggle theme"></button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main">
|
||||
<section class="page-header">
|
||||
<div class="container">
|
||||
<h1>Security & data protection</h1>
|
||||
<p>PorfolioJournal is built to keep your portfolio data secure, private, and under your control.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content">
|
||||
<div class="container">
|
||||
<div class="content-body">
|
||||
<h2>On-device storage</h2>
|
||||
<p>All portfolio data and journal notes are stored locally on your device by default. This keeps sensitive information off external servers.</p>
|
||||
|
||||
<h2>Optional passcode and Face ID</h2>
|
||||
<p>PorfolioJournal can use iOS security features, including device passcodes and Face ID, to keep your data protected from unauthorized access.</p>
|
||||
|
||||
<h2>iCloud sync</h2>
|
||||
<p>If you enable iCloud sync, your data is stored and synced through your Apple ID. iCloud uses Apple-managed encryption in transit and at rest.</p>
|
||||
|
||||
<h2>Backups and exports</h2>
|
||||
<p>You can export CSV or JSON files for manual backups. We recommend storing backups in a trusted location and keeping your Files app secured.</p>
|
||||
|
||||
<h2>Best practices</h2>
|
||||
<ul>
|
||||
<li>Use a strong device passcode and Face ID.</li>
|
||||
<li>Keep iOS and PorfolioJournal updated.</li>
|
||||
<li>Protect your Apple ID with two-factor authentication.</li>
|
||||
<li>Do not share your Apple ID credentials with others.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Responsible disclosure</h2>
|
||||
<p>If you discover a security issue, contact us at <a href="mailto:security@portfoliojournal.app">security@portfoliojournal.app</a>. We appreciate responsible disclosure and will respond promptly.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="footer-grid">
|
||||
<div class="footer-brand">
|
||||
<div class="footer-logo">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="footer-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#footer-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</div>
|
||||
<p>Calm, offline-first portfolio journaling for iOS.</p>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Product</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="index.html">Overview</a>
|
||||
<a class="footer-link" href="about.html">About</a>
|
||||
<a class="footer-link" href="changelog.html">Changelog</a>
|
||||
<a class="footer-link" href="status.html">Status</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Support</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="support.html">Support</a>
|
||||
<a class="footer-link" href="security.html">Security</a>
|
||||
<a class="footer-link" href="delete-data.html">Delete Data</a>
|
||||
<a class="footer-link" href="press-kit.html">Press Kit</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Legal</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="privacy.html">Privacy Policy</a>
|
||||
<a class="footer-link" href="terms.html">Terms</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-bottom">
|
||||
<div class="footer-copyright">© <span data-year></span> PorfolioJournal. All rights reserved.</div>
|
||||
<div class="footer-legal">
|
||||
<a href="privacy.html">Privacy</a>
|
||||
<a href="terms.html">Terms</a>
|
||||
<a href="support.html">Support</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://portfoliojournal.app/</loc>
|
||||
<lastmod>2025-01-15</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://portfoliojournal.app/privacy.html</loc>
|
||||
<lastmod>2025-01-15</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://portfoliojournal.app/terms.html</loc>
|
||||
<lastmod>2025-01-15</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://portfoliojournal.app/support.html</loc>
|
||||
<lastmod>2025-01-15</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://portfoliojournal.app/security.html</loc>
|
||||
<lastmod>2025-01-15</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://portfoliojournal.app/press-kit.html</loc>
|
||||
<lastmod>2025-01-15</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://portfoliojournal.app/status.html</loc>
|
||||
<lastmod>2025-01-15</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://portfoliojournal.app/changelog.html</loc>
|
||||
<lastmod>2025-01-15</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://portfoliojournal.app/delete-data.html</loc>
|
||||
<lastmod>2025-01-15</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://portfoliojournal.app/about.html</loc>
|
||||
<lastmod>2025-01-15</lastmod>
|
||||
</url>
|
||||
</urlset>
|
||||
|
|
@ -0,0 +1,157 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Status — PorfolioJournal</title>
|
||||
<meta name="description" content="PorfolioJournal system status and maintenance updates.">
|
||||
<link rel="canonical" href="https://portfoliojournal.app/status.html">
|
||||
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Status — PorfolioJournal">
|
||||
<meta property="og:description" content="Current system status and historical incidents.">
|
||||
<meta property="og:url" content="https://portfoliojournal.app/status.html">
|
||||
<meta property="og:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Status — PorfolioJournal">
|
||||
<meta name="twitter:description" content="Current system status and historical incidents.">
|
||||
<meta name="twitter:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<link rel="icon" href="assets/icons/favicon.svg" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="assets/icons/apple-touch-icon.svg">
|
||||
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<script src="assets/js/config.js"></script>
|
||||
<script src="assets/js/main.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<a class="skip-link" href="#main">Skip to content</a>
|
||||
<header class="nav" role="banner">
|
||||
<div class="nav-inner">
|
||||
<a class="nav-logo" href="index.html" aria-label="PorfolioJournal home">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="nav-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#nav-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</a>
|
||||
<nav aria-label="Primary">
|
||||
<button class="mobile-menu-toggle" aria-label="Open navigation" aria-expanded="false"></button>
|
||||
<div class="nav-links">
|
||||
<a class="nav-link" href="index.html">Home</a>
|
||||
<a class="nav-link" href="privacy.html">Privacy</a>
|
||||
<a class="nav-link" href="terms.html">Terms</a>
|
||||
<a class="nav-link" href="support.html">Support</a>
|
||||
<a class="nav-link" href="about.html">About</a>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="nav-actions">
|
||||
<button class="theme-toggle" aria-label="Toggle theme"></button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main">
|
||||
<section class="page-header">
|
||||
<div class="container">
|
||||
<h1>Status</h1>
|
||||
<p>Manual updates and current system health for PorfolioJournal.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content">
|
||||
<div class="container">
|
||||
<div class="content-body">
|
||||
<div class="status-indicator">
|
||||
<span class="status-dot" aria-hidden="true"></span>
|
||||
<span class="status-text">All systems operational</span>
|
||||
</div>
|
||||
|
||||
<div class="status-list">
|
||||
<div class="status-item">
|
||||
<span class="status-item-name">App Store downloads</span>
|
||||
<span class="status-item-status">Operational</span>
|
||||
</div>
|
||||
<div class="status-item">
|
||||
<span class="status-item-name">iCloud sync (optional)</span>
|
||||
<span class="status-item-status">Operational</span>
|
||||
</div>
|
||||
<div class="status-item">
|
||||
<span class="status-item-name">Website</span>
|
||||
<span class="status-item-status">Operational</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>Past incidents</h2>
|
||||
<p>No incidents reported yet. Add updates here as needed.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="footer-grid">
|
||||
<div class="footer-brand">
|
||||
<div class="footer-logo">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="footer-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#footer-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</div>
|
||||
<p>Calm, offline-first portfolio journaling for iOS.</p>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Product</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="index.html">Overview</a>
|
||||
<a class="footer-link" href="about.html">About</a>
|
||||
<a class="footer-link" href="changelog.html">Changelog</a>
|
||||
<a class="footer-link" href="status.html">Status</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Support</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="support.html">Support</a>
|
||||
<a class="footer-link" href="security.html">Security</a>
|
||||
<a class="footer-link" href="delete-data.html">Delete Data</a>
|
||||
<a class="footer-link" href="press-kit.html">Press Kit</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Legal</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="privacy.html">Privacy Policy</a>
|
||||
<a class="footer-link" href="terms.html">Terms</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-bottom">
|
||||
<div class="footer-copyright">© <span data-year></span> PorfolioJournal. All rights reserved.</div>
|
||||
<div class="footer-legal">
|
||||
<a href="privacy.html">Privacy</a>
|
||||
<a href="terms.html">Terms</a>
|
||||
<a href="support.html">Support</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,191 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Support — PorfolioJournal</title>
|
||||
<meta name="description" content="Get help with PorfolioJournal, including FAQs, contact options, and troubleshooting tips.">
|
||||
<link rel="canonical" href="https://portfoliojournal.app/support.html">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:title" content="Support — PorfolioJournal">
|
||||
<meta property="og:description" content="Help and support resources for PorfolioJournal.">
|
||||
<meta property="og:url" content="https://portfoliojournal.app/support.html">
|
||||
<meta property="og:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Support — PorfolioJournal">
|
||||
<meta name="twitter:description" content="Help and support resources for PorfolioJournal.">
|
||||
<meta name="twitter:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<link rel="icon" href="assets/icons/favicon.svg" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="assets/icons/apple-touch-icon.svg">
|
||||
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<script src="assets/js/config.js"></script>
|
||||
<script src="assets/js/main.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<a class="skip-link" href="#main">Skip to content</a>
|
||||
<header class="nav" role="banner">
|
||||
<div class="nav-inner">
|
||||
<a class="nav-logo" href="index.html" aria-label="PorfolioJournal home">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="nav-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#nav-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</a>
|
||||
<nav aria-label="Primary">
|
||||
<button class="mobile-menu-toggle" aria-label="Open navigation" aria-expanded="false"></button>
|
||||
<div class="nav-links">
|
||||
<a class="nav-link" href="index.html">Home</a>
|
||||
<a class="nav-link" href="privacy.html">Privacy</a>
|
||||
<a class="nav-link" href="terms.html">Terms</a>
|
||||
<a class="nav-link" href="support.html">Support</a>
|
||||
<a class="nav-link" href="about.html">About</a>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="nav-actions">
|
||||
<button class="theme-toggle" aria-label="Toggle theme"></button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main">
|
||||
<section class="page-header">
|
||||
<div class="container">
|
||||
<h1>Support</h1>
|
||||
<p>We are here to help you stay on track with your portfolio journaling.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content">
|
||||
<div class="container">
|
||||
<div class="content-body">
|
||||
<div class="cards-grid">
|
||||
<div class="card">
|
||||
<div class="card-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a4 4 0 0 1-4 4H7l-4 3V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4z"/></svg>
|
||||
</div>
|
||||
<h3>Email support</h3>
|
||||
<p>Send a direct message to the support team. We reply within 2 business days.</p>
|
||||
<a class="btn btn-secondary" href="mailto:support@portfoliojournal.app?subject=PorfolioJournal%20Support%20Request">Email support</a>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-icon" aria-hidden="true">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 20h9"/><path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5z"/></svg>
|
||||
</div>
|
||||
<h3>Report a bug</h3>
|
||||
<p>Use the template below to share steps, device model, and iOS version.</p>
|
||||
<a class="btn btn-secondary" href="mailto:support@portfoliojournal.app?subject=PorfolioJournal%20Bug%20Report&body=Device%20Model%3A%0AiOS%20Version%3A%0AApp%20Version%3A%0ASteps%20to%20Reproduce%3A%0AExpected%20Result%3A%0AActual%20Result%3A%0A">Report a bug</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>FAQ</h2>
|
||||
<div class="faq-list">
|
||||
<div class="faq-item">
|
||||
<button class="faq-question" aria-expanded="false">How does iCloud sync work?</button>
|
||||
<div class="faq-answer">
|
||||
<div class="faq-answer-inner">Enable iCloud in Settings inside the app. Data is synced through your Apple ID and stays in your private iCloud storage.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="faq-item">
|
||||
<button class="faq-question" aria-expanded="false">How can I back up my data?</button>
|
||||
<div class="faq-answer">
|
||||
<div class="faq-answer-inner">Use Export to save CSV or JSON files to Files, iCloud Drive, or another provider you trust.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="faq-item">
|
||||
<button class="faq-question" aria-expanded="false">Can I restore purchases?</button>
|
||||
<div class="faq-answer">
|
||||
<div class="faq-answer-inner">If PorfolioJournal offers paid features, use “Restore Purchases” in the app or in your App Store account settings.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="faq-item">
|
||||
<button class="faq-question" aria-expanded="false">Do I need a subscription?</button>
|
||||
<div class="faq-answer">
|
||||
<div class="faq-answer-inner">If PorfolioJournal offers paid features, the core experience remains available with the base version. Premium unlocks advanced analytics and multiple accounts.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="faq-item">
|
||||
<button class="faq-question" aria-expanded="false">How do I export data for taxes or reporting?</button>
|
||||
<div class="faq-answer">
|
||||
<div class="faq-answer-inner">Export CSV files and share them directly with your reporting tools. You stay in control of where the files go.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="info-box">
|
||||
<p>Need immediate help? Email <a href="mailto:support@portfoliojournal.app">support@portfoliojournal.app</a> and include your device model and iOS version.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="footer-grid">
|
||||
<div class="footer-brand">
|
||||
<div class="footer-logo">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="footer-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#footer-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</div>
|
||||
<p>Calm, offline-first portfolio journaling for iOS.</p>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Product</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="index.html">Overview</a>
|
||||
<a class="footer-link" href="about.html">About</a>
|
||||
<a class="footer-link" href="changelog.html">Changelog</a>
|
||||
<a class="footer-link" href="status.html">Status</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Support</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="support.html">Support</a>
|
||||
<a class="footer-link" href="security.html">Security</a>
|
||||
<a class="footer-link" href="delete-data.html">Delete Data</a>
|
||||
<a class="footer-link" href="press-kit.html">Press Kit</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Legal</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="privacy.html">Privacy Policy</a>
|
||||
<a class="footer-link" href="terms.html">Terms</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-bottom">
|
||||
<div class="footer-copyright">© <span data-year></span> PorfolioJournal. All rights reserved.</div>
|
||||
<div class="footer-legal">
|
||||
<a href="privacy.html">Privacy</a>
|
||||
<a href="terms.html">Terms</a>
|
||||
<a href="support.html">Support</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,164 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Terms of Service — PorfolioJournal</title>
|
||||
<meta name="description" content="Terms of Service for PorfolioJournal, the iOS portfolio journaling app.">
|
||||
<link rel="canonical" href="https://portfoliojournal.app/terms.html">
|
||||
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:title" content="Terms of Service — PorfolioJournal">
|
||||
<meta property="og:description" content="Usage terms, disclaimers, and service details for PorfolioJournal.">
|
||||
<meta property="og:url" content="https://portfoliojournal.app/terms.html">
|
||||
<meta property="og:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Terms of Service — PorfolioJournal">
|
||||
<meta name="twitter:description" content="Usage terms, disclaimers, and service details for PorfolioJournal.">
|
||||
<meta name="twitter:image" content="https://portfoliojournal.app/assets/images/og-image.svg">
|
||||
|
||||
<link rel="icon" href="assets/icons/favicon.svg" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="assets/icons/apple-touch-icon.svg">
|
||||
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<script src="assets/js/config.js"></script>
|
||||
<script src="assets/js/main.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<a class="skip-link" href="#main">Skip to content</a>
|
||||
<header class="nav" role="banner">
|
||||
<div class="nav-inner">
|
||||
<a class="nav-logo" href="index.html" aria-label="PorfolioJournal home">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="nav-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#nav-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</a>
|
||||
<nav aria-label="Primary">
|
||||
<button class="mobile-menu-toggle" aria-label="Open navigation" aria-expanded="false"></button>
|
||||
<div class="nav-links">
|
||||
<a class="nav-link" href="index.html">Home</a>
|
||||
<a class="nav-link" href="privacy.html">Privacy</a>
|
||||
<a class="nav-link" href="terms.html">Terms</a>
|
||||
<a class="nav-link" href="support.html">Support</a>
|
||||
<a class="nav-link" href="about.html">About</a>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="nav-actions">
|
||||
<button class="theme-toggle" aria-label="Toggle theme"></button>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main">
|
||||
<section class="page-header">
|
||||
<div class="container">
|
||||
<h1>Terms of Service</h1>
|
||||
<p>These terms explain your rights and responsibilities when using PorfolioJournal.</p>
|
||||
<div class="page-header-meta">
|
||||
<span>Effective date: <strong data-effective-date></strong></span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content">
|
||||
<div class="container">
|
||||
<div class="content-body">
|
||||
<h2>Acceptance of terms</h2>
|
||||
<p>By using PorfolioJournal, you agree to these Terms of Service. If you do not agree, do not use the app.</p>
|
||||
|
||||
<h2>Use of the app</h2>
|
||||
<p>PorfolioJournal provides tools for personal portfolio tracking and journaling. You are responsible for the accuracy of the information you enter and for safeguarding your device.</p>
|
||||
|
||||
<h2>Not financial advice</h2>
|
||||
<p>PorfolioJournal is provided for informational and organizational purposes only. It does not provide investment advice, brokerage services, or recommendations.</p>
|
||||
|
||||
<h2>Subscriptions and paid features</h2>
|
||||
<p>If PorfolioJournal offers paid features, prices and terms will be shown in the App Store. Subscriptions are managed by Apple and can be cancelled in your Apple ID settings.</p>
|
||||
|
||||
<h2>iCloud and device storage</h2>
|
||||
<p>Content is stored locally unless you enable iCloud sync. You are responsible for managing your iCloud settings and device backups.</p>
|
||||
|
||||
<h2>Intellectual property</h2>
|
||||
<p>PorfolioJournal and its content are owned by PorfolioJournal or its licensors. You may not copy, modify, or distribute the app except as permitted by Apple.</p>
|
||||
|
||||
<h2>Service availability</h2>
|
||||
<p>We work to keep the app reliable but do not guarantee uninterrupted access or error-free operation. Features may change or be discontinued with reasonable notice.</p>
|
||||
|
||||
<h2>Limitation of liability</h2>
|
||||
<p>To the fullest extent permitted by law, PorfolioJournal is not liable for indirect or consequential damages related to your use of the app.</p>
|
||||
|
||||
<h2>Contact</h2>
|
||||
<p>If you have questions about these terms, contact us at <a href="mailto:support@portfoliojournal.app">support@portfoliojournal.app</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="footer-grid">
|
||||
<div class="footer-brand">
|
||||
<div class="footer-logo">
|
||||
<svg viewBox="0 0 64 64" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="footer-gradient" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0%" stop-color="#667eea"></stop>
|
||||
<stop offset="100%" stop-color="#764ba2"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="6" y="6" width="52" height="52" rx="14" fill="url(#footer-gradient)"></rect>
|
||||
<path d="M20 44c0-10 8-18 16-18s16 8 16 18" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
<path d="M24 26h24" fill="none" stroke="white" stroke-width="4" stroke-linecap="round"></path>
|
||||
</svg>
|
||||
<span>PorfolioJournal</span>
|
||||
</div>
|
||||
<p>Calm, offline-first portfolio journaling for iOS.</p>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Product</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="index.html">Overview</a>
|
||||
<a class="footer-link" href="about.html">About</a>
|
||||
<a class="footer-link" href="changelog.html">Changelog</a>
|
||||
<a class="footer-link" href="status.html">Status</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Support</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="support.html">Support</a>
|
||||
<a class="footer-link" href="security.html">Security</a>
|
||||
<a class="footer-link" href="delete-data.html">Delete Data</a>
|
||||
<a class="footer-link" href="press-kit.html">Press Kit</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h5>Legal</h5>
|
||||
<div class="footer-links">
|
||||
<a class="footer-link" href="privacy.html">Privacy Policy</a>
|
||||
<a class="footer-link" href="terms.html">Terms</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-bottom">
|
||||
<div class="footer-copyright">© <span data-year></span> PorfolioJournal. All rights reserved.</div>
|
||||
<div class="footer-legal">
|
||||
<a href="privacy.html">Privacy</a>
|
||||
<a href="terms.html">Terms</a>
|
||||
<a href="support.html">Support</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||