better desgin
This commit is contained in:
+65
-43
@@ -6,7 +6,6 @@
|
||||
<title>Home</title>
|
||||
<script src="https://unpkg.com/htmx.org@2.0.4"></script>
|
||||
<link rel="stylesheet" href="/static/tailwind.css" />
|
||||
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
|
||||
<head>
|
||||
<body class="m-0 p-0 bg-zinc-50 rubik-400">
|
||||
|
||||
@@ -22,7 +21,7 @@
|
||||
<main id="parallax-section" class="relative h-screen overflow-hidden">
|
||||
<div id="parallax-bg"
|
||||
class="absolute inset-x-0 will-change-transform overflow-hidden"
|
||||
style="top:-100%;bottom:-30%;">
|
||||
style="top:-200%;bottom:-30%;">
|
||||
<div hx-get="/static/components/background.html" hx-trigger="load" hx-swap="outerHTML"></div>
|
||||
</div>
|
||||
<!-- scroller: fills the viewport, scrolls inside -->
|
||||
@@ -31,21 +30,21 @@
|
||||
|
||||
<aside id="sidebar" class="w-48 bg-white shrink-0 p-6 sticky top-0 self-start h-screen overflow-y-auto pt-20 hidden lg:block">
|
||||
<div class="mb-6">
|
||||
<img src="/static/icons/half-moon.svg" id="darkmode" onclick="toggleTheme()" >
|
||||
<img src="/static/icons/sun-light.svg" id="lightmode" onclick="toggleTheme()" class="hidden">
|
||||
<img src="/static/icons/half-moon.svg" id="btn-dark" class="block dark:hidden cursor-pointer">
|
||||
<img src="/static/icons/sun-light.svg" id="btn-light" class="hidden dark:block cursor-pointer">
|
||||
</div>
|
||||
<div class="mb-6">
|
||||
<p class="text-xs uppercase tracking-widest text-gray-400 mb-2">navigate</p>
|
||||
<div class="flex flex-col gap-1 text-sm">
|
||||
<a href="#about">// about</a>
|
||||
<a href="#experience">// experience</a>
|
||||
<a href="#education">// education</a>
|
||||
<a href="#opinion">// opinion</a>
|
||||
<a href="#automation">// automation</a>
|
||||
<a href="#interests" onclick="InterestShow()">// interests</a>
|
||||
<p class="text-xs uppercase tracking-widest text-gray-800 mb-2">navigate</p>
|
||||
<div class="flex flex-col gap-2 text-xs text-gray-500 sidebar-links">
|
||||
<a href="#about">// About</a>
|
||||
<a href="#experience">// Experience</a>
|
||||
<a href="#education">// Education</a>
|
||||
<a href="#opinion">// Opinion</a>
|
||||
<a href="#automation">// Automation</a>
|
||||
<a href="#interests" onclick="InterestShow()">// Interests</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-6">
|
||||
<div class="mb-6 ">
|
||||
<p class="text-xs uppercase tracking-widest text-gray-400 mb-2">skills</p>
|
||||
<div class="flex flex-col gap-1 text-sm">
|
||||
<div>| Excel</div>
|
||||
@@ -84,25 +83,33 @@
|
||||
<section id="experience" class="mb-12">
|
||||
<h2 class="text-2xl font-light border-b pb-2 mb-6">Experience</h2>
|
||||
<div class="grid grid-cols-1 gap-4">
|
||||
<div class="border border-gray-400 hover:border-pink-400 rounded-md p-6 cursor-pointer hover:bg-gray-50" onclick="window.location.href='#research'">
|
||||
<div class="border-2 border-gray-200 hover:border-pink-400 rounded-md p-6 cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 dark:border-gray-600 dark:hover:border-pink-400"
|
||||
onclick="window.location.href='#research'">
|
||||
|
||||
<div class="flex justify-between mb-2">
|
||||
<span class="font-medium">Independent Equity Research</span>
|
||||
<span class="font-medium dark:text-white">Independent Equity Research</span>
|
||||
<span class="text-xs border border-blue-600 text-blue-600 rounded-sm px-2 py-0.5 self-start">finance</span>
|
||||
</div>
|
||||
<p class="text-sm text-gray-600 leading-relaxed">Fundamental analysis using SEC filings (10-K, 10-Q) and earnings reports. Assess
|
||||
|
||||
<p class="text-sm text-gray-600 dark:text-gray-400 leading-relaxed">
|
||||
Fundamental analysis using SEC filings (10-K, 10-Q) and earnings reports. Assess
|
||||
profitability, liquidity, risk factors, and long-term business sustainability. Handle incomplete or
|
||||
low-transparency information through structured cross-validation.</p>
|
||||
<a class="text-xs font-mono mt-3 inline-block text-blue-600" href="#research">// Go to Analysis</a>
|
||||
low-transparency information through structured cross-validation.
|
||||
</p>
|
||||
|
||||
<a class="text-xs font-mono mt-3 inline-block text-blue-600 dark:text-blue-400"
|
||||
href="#research"
|
||||
onclick="event.stopPropagation()">// Go to Analysis</a>
|
||||
</div>
|
||||
<div class="border border-gray-400 hover:border-pink-400 rounded-md p-6 cursor-pointer hover:bg-gray-50" onclick="window.location.href='#automation'">
|
||||
<div class="border-2 border-gray-200 hover:border-pink-400 rounded-md p-6 cursor-pointer hover:bg-gray-50" onclick="window.location.href='#automation'">
|
||||
<div class="flex justify-between mb-2">
|
||||
<span class="font-medium">Technical Tools & Automation</span>
|
||||
<span class="text-xs border px-2 py-0.5 self-start">engineering</span>
|
||||
<span class="text-xs border px-2 py-0.5 text-blue-600 rounded-sm self-start">engineering</span>
|
||||
</div>
|
||||
<p class="text-sm text-gray-600 leading-relaxed">Build lightweight backend tools to automate repetitive analytical and operational tasks.
|
||||
Python for data processing, validation, and workflow automation. Lightweight online services in Go,
|
||||
focusing on speed and reliability.</p>
|
||||
<a class="text-xs font-mono mt-3 inline-block" href="#automation">// Go to Tools</a>
|
||||
<a class="text-xs font-mono mt-3 inline-block text-blue-600" href="#automation">// Go to Tools</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -110,14 +117,14 @@
|
||||
<section id="education" class="mb-12">
|
||||
<h2 class="text-2xl font-light border-b pb-2 mb-6">Education</h2>
|
||||
<div class="flex flex-col gap-4">
|
||||
<div class="flex gap-6 border-b pb-4">
|
||||
<div class="flex gap-6 border-2 border-gray-200 rounded-md p-4">
|
||||
<div class="text-xs text-gray-400 font-mono w-28 shrink-0">2025 — present</div>
|
||||
<div>
|
||||
<div class="font-medium text-sm">Bachelor of Economics & Business Administration (HA)</div>
|
||||
<div class="text-xs text-gray-500">Aalborg University · Expected 2028</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex gap-6 border-b pb-4">
|
||||
<div class="flex gap-6 border-2 border-gray-200 rounded-md p-4">
|
||||
<div class="text-xs text-gray-400 font-mono w-28 shrink-0">2024 — 2025<br>
|
||||
<span class="text-red-400">discontinued</span>
|
||||
</div>
|
||||
@@ -126,7 +133,7 @@
|
||||
<div class="text-xs text-gray-500">Aalborg University · 1 semester</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex gap-6 border-b pb-4">
|
||||
<div class="flex gap-6 border-2 border-gray-200 rounded-md p-4">
|
||||
<div class="text-xs text-gray-400 font-mono w-28 shrink-0">2020 — 2023</div>
|
||||
<div>
|
||||
<div class="font-medium text-sm">HTX - Technical Upper Secondary Education</div>
|
||||
@@ -161,7 +168,7 @@
|
||||
often poorly understood by the team and difficult to reason about over time.
|
||||
</p>
|
||||
<div class="grid grid-cols-1 gap-4">
|
||||
<div class="border p-6">
|
||||
<div class="border-2 border-gray-200 rounded-md p-6">
|
||||
<div class="font-medium mb-2">Portfolio Engine</div>
|
||||
<p class="text-sm text-gray-600 leading-relaxed mb-4">A lightweight portfolio and financial data backend written in Go. Tracks companies,
|
||||
currencies, revenue reports, and trades across configurable time periods — replacing spreadsheets with a
|
||||
@@ -179,7 +186,7 @@
|
||||
</ul>
|
||||
<a class="text-xs font-mono mt-4 inline-block" href="https://git.samantha42.xyz/samantha/Portfolio-Engine">// Git repo</a>
|
||||
</div>
|
||||
<div class="border p-6">
|
||||
<div class="border-2 border-gray-200 rounded-md p-6">
|
||||
<div class="font-medium mb-2">Accounting Management</div>
|
||||
<p class="text-sm text-gray-600 leading-relaxed">A lightweight, SQL-backed, web-based CLI system designed to track assets and liabilities. The goal is to
|
||||
provide a simple, fast, and scalable financial tracking tool that can grow from personal use to more
|
||||
@@ -190,7 +197,7 @@
|
||||
|
||||
<section id="research" class="mb-12">
|
||||
<h2 class="text-2xl font-light border-b pb-2 mb-6">Equity Research</h2>
|
||||
<div class="border p-6 mb-4">
|
||||
<div class="border-2 border-gray-200 rounded-md p-6 mb-4">
|
||||
<div class="font-medium mb-2">Story vs Fundamental value</div>
|
||||
<p class="text-sm text-gray-600 leading-relaxed">
|
||||
The truth I keep coming back to is simple: find value grounded in the fundamental numbers of a company.
|
||||
@@ -205,23 +212,23 @@
|
||||
</p>
|
||||
</div>
|
||||
<h3 class="text-lg font-light mb-4">Current stock analysis</h3>
|
||||
<div class="border p-6 mb-4">
|
||||
<div class="border-2 border-gray-200 rounded-md p-6 mb-4 hover:border-pink-400" onclick="window.location.href='/static/pdf/mstr.pdf'">
|
||||
<div class="flex justify-between mb-2">
|
||||
<span class="font-medium">MSTR: Strategy</span>
|
||||
<span class="text-red-500 text-sm">Sell</span>
|
||||
</div>
|
||||
<p class="text-sm text-gray-600 leading-relaxed">The company only owns btc by issuing debt and preferred stock offering.<br>
|
||||
The company is a ponzi scheme at its best.</p>
|
||||
<a class="text-xs font-mono mt-3 inline-block" href="/static/pdf/mstr.pdf" target="_blank">// Read file</a>
|
||||
<a class="text-xs font-mono mt-3 inline-block text-blue-600" href="/static/pdf/mstr.pdf" target="_blank">// Read file</a>
|
||||
</div>
|
||||
<div class="border p-6 mb-4">
|
||||
<div class="border-2 border-gray-200 rounded-md p-6 mb-4 hover:border-pink-400" onclick="window.location.href='/static/pdf/mstr.pdf'">
|
||||
<div class="flex justify-between mb-2">
|
||||
<span class="font-medium">Novo.B/NVO: Novo Nordisk A/S</span>
|
||||
<span class="text-green-600 text-sm">Buy</span>
|
||||
</div>
|
||||
<p class="text-sm text-gray-600 leading-relaxed">The product sales of weight loss drugs are high class, pipeline is undervalued.<br>
|
||||
Pipeline and wegovy pill is not recognised correctly as high focus on expiration of current sold product. High pessimistic view of pipeline.</p>
|
||||
<a class="text-xs font-mono mt-3 inline-block" href="/static/pdf/novo.pdf" target="_blank">// Read file</a>
|
||||
<a class="text-xs font-mono mt-3 inline-block text-blue-600" href="/static/pdf/novo.pdf" target="_blank">// Read file</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -347,20 +354,35 @@
|
||||
|
||||
|
||||
<script>
|
||||
// On page load — restore saved theme
|
||||
(function () {
|
||||
if (localStorage.theme === 'dark') {
|
||||
document.documentElement.classList.add('dark');
|
||||
}
|
||||
})();
|
||||
|
||||
function toggleTheme() {
|
||||
const isDark = document.documentElement.classList.toggle('dark');
|
||||
localStorage.theme = isDark ? 'dark' : 'light';
|
||||
document.getElementById('darkmode').classList.toggle('hidden', isDark);
|
||||
document.getElementById('lightmode').classList.toggle('hidden', !isDark);
|
||||
// On page load, restore saved theme
|
||||
const saved = localStorage.getItem('theme');
|
||||
if (saved === 'dark') {
|
||||
document.documentElement.classList.add('dark');
|
||||
} else {
|
||||
document.documentElement.classList.remove('dark');
|
||||
}
|
||||
|
||||
function darkTheme() {
|
||||
document.documentElement.classList.add('dark');
|
||||
localStorage.setItem('theme', 'dark');
|
||||
}
|
||||
|
||||
function lightTheme() {
|
||||
document.documentElement.classList.remove('dark');
|
||||
localStorage.setItem('theme', 'light');
|
||||
}
|
||||
|
||||
document.getElementById('btn-dark').addEventListener('click', function() {
|
||||
document.documentElement.classList.add('dark');
|
||||
localStorage.setItem('theme', 'dark');
|
||||
});
|
||||
|
||||
document.getElementById('btn-light').addEventListener('click', function() {
|
||||
document.documentElement.classList.remove('dark');
|
||||
localStorage.setItem('theme', 'light');
|
||||
});
|
||||
|
||||
function InterestShow() {
|
||||
const body = document.getElementById('interests-body');
|
||||
const chevron = document.getElementById('interests-chevron');
|
||||
@@ -378,7 +400,7 @@
|
||||
|
||||
const bg = document.getElementById('parallax-bg');
|
||||
const scroller = document.getElementById('scroller');
|
||||
const speed = 0.1;
|
||||
const speed = 0.5;
|
||||
|
||||
scroller.addEventListener('scroll', () => {
|
||||
const offset = scroller.scrollTop * speed;
|
||||
|
||||
+109
-2786
File diff suppressed because it is too large
Load Diff
+39
-5
@@ -1,10 +1,6 @@
|
||||
@import "tailwindcss";
|
||||
|
||||
@custom-variant dark (&:where(.dark, .dark *));
|
||||
@theme {
|
||||
--color-regal-blue: #243c5a;
|
||||
}
|
||||
|
||||
@custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));
|
||||
@import url('https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Libre+Caslon+Display&family=Libre+Caslon+Text:ital,wght@0,400;0,700;1,400&family=Noto+Sans+JP:wght@100..900&family=Rubik:ital,wght@0,300..900;1,300..900&display=swap');
|
||||
@import url('https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&display=swap');
|
||||
|
||||
@@ -58,3 +54,41 @@
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.sidebar-links a.hidden {
|
||||
opacity: 0;
|
||||
transition: opacity 0.4s linear;
|
||||
}
|
||||
|
||||
.sidebar-links:hover a.hidden {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
aside{
|
||||
border-right:1px solid var(--border);
|
||||
padding:2.5rem 1.5rem;
|
||||
display:flex;flex-direction:column;gap:1rem;
|
||||
position:sticky;top:52px;height:calc(100vh - 52px);
|
||||
overflow-y:auto;
|
||||
background:var(--surface);
|
||||
}
|
||||
.sidebar-label{
|
||||
font-family:var(--ff-mono);font-size:0.65rem;
|
||||
letter-spacing:0.2em;text-transform:uppercase;
|
||||
color:var(--dim);margin-bottom:0.8rem;
|
||||
}
|
||||
.sidebar-links{display:flex;flex-direction:column;gap:2px;}
|
||||
.sidebar-links a{
|
||||
font-family:var(--ff-mono);font-size:0.78rem;color:var(--muted);
|
||||
transition:color 0.15s,background 0.15s;
|
||||
display:flex;align-items:center;gap:6px;
|
||||
}
|
||||
.sidebar-links a:hover{color:var(--text);background:var(--surface2);}
|
||||
.skill-list{display:flex;flex-direction:column;gap:4px;}
|
||||
.skill-item{
|
||||
font-family:var(--ff-mono);font-size:0.78rem;
|
||||
color:var(--muted);padding:0.3rem 0.6rem;
|
||||
border-left:2px solid var(--border2);
|
||||
transition:border-color 0.15s,color 0.15s;cursor:default;
|
||||
}
|
||||
.skill-item:hover{border-color:var(--accent);color:var(--text);}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
darkMode: 'class',
|
||||
content: ['./static/**/*.html'], // adjust to where your HTML files are
|
||||
theme: {
|
||||
extend: {},
|
||||
},
|
||||
plugins: [],
|
||||
}
|
||||
+2
-1
@@ -14,7 +14,8 @@ if [ "$OS" = "Darwin" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
exec "./$BIN" ---input static/vars.css \
|
||||
exec "./$BIN" --input static/vars.css \
|
||||
--config tailwind.config.js \
|
||||
--content "./static/**/*.html" \
|
||||
--output static/tailwind.css \
|
||||
--watch
|
||||
Reference in New Issue
Block a user