`)
- }
- })
-
- //http.HandleFunc("/portfolio", Portfolio)
- mux.HandleFunc("/git", func(w http.ResponseWriter, r *http.Request) {
- http.Redirect(w, r, "https://git.samantha42.xyz", http.StatusFound)
- })
-
- // --- /admin/ sub-mux ---
- adminMux := http.NewServeMux()
- adminMux.HandleFunc("GET /{$}", func(w http.ResponseWriter, r *http.Request) {
- http.ServeFile(w, r, "./static/admin.html")
- })
-
- // strip the /admin prefix before handing off
- mux.Handle("/admin/", http.StripPrefix("/admin", adminMux))
-
- // --- /admin/api/ sub-mux ---
- apiMux := http.NewServeMux()
- apiMux.HandleFunc("GET /stats/subscribers", requireAuth(func(w http.ResponseWriter, r *http.Request) {
- conf, err := loadConfig()
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
-
- }
-
- fmt.Fprintf(w, "%s", strconv.Itoa(len(conf.Emails)))
- }))
-
- apiMux.HandleFunc("GET /stats/sent", requireAuth(func(w http.ResponseWriter, r *http.Request) {
- conf, err := loadConfig()
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
-
- }
- fmt.Fprintf(w, "%s", strconv.Itoa(conf.NewsSent))
- }))
-
- // strip /admin/api before handing off
- adminMux.Handle("/api/", http.StripPrefix("/api", apiMux))
-
- fmt.Printf("running on http://localhost:%s/\n", *port)
- if err := http.ListenAndServe(":"+*port, mux); err != nil {
+ staticRoot, err := fs.Sub(sourceFS, "source")
+ if err != nil {
log.Fatal(err)
}
-}
-var sessionStore = map[string]time.Time{}
-var sessionMu sync.RWMutex
-
-func generateSession() string {
- b := make([]byte, 32)
- rand.Read(b)
- return hex.EncodeToString(b)
-}
-
-func requireAuth(next http.HandlerFunc) http.HandlerFunc {
- return func(w http.ResponseWriter, r *http.Request) {
- cookie, err := r.Cookie("session")
+ // print exactly what got embedded
+ fs.WalkDir(staticRoot, ".", func(path string, d fs.DirEntry, err error) error {
if err != nil {
- http.Redirect(w, r, "/login", http.StatusSeeOther)
+ log.Println("walk error:", err)
+ return nil
+ }
+ log.Println("embedded:", path)
+ return nil
+ })
+
+ mux := http.NewServeMux()
+ mux.HandleFunc("GET /{$}", func(w http.ResponseWriter, r *http.Request) {
+ tmpl, err := template.ParseFS(staticRoot, "templates/main.html", "pages/index.html")
+ if err != nil {
+ log.Println("parse error:", err)
+ http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
- sessionMu.RLock()
- expiry, ok := sessionStore[cookie.Value]
- sessionMu.RUnlock()
+ data := struct {
+ Title string
+ Sub bool
+ }{
+ Title: "home",
+ Sub: false,
+ }
- if !ok || time.Now().After(expiry) {
- sessionMu.Lock()
- delete(sessionStore, cookie.Value)
- sessionMu.Unlock()
- http.Redirect(w, r, "/login", http.StatusSeeOther)
+ w.Header().Set("Content-Type", "text/html; charset=utf-8")
+ // execute the base file by name — main.html is the entrypoint
+ if err := tmpl.ExecuteTemplate(w, "main.html", data); err != nil {
+ log.Println("execute error:", err)
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ }
+ })
+
+ mux.HandleFunc("GET /research", func(w http.ResponseWriter, r *http.Request) {
+ tmpl, err := template.ParseFS(staticRoot, "templates/main.html", "pages/research.html")
+ if err != nil {
+ log.Println("parse error:", err)
+ http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
- next(w, r)
- }
+ data := struct {
+ Title string
+ Sub bool
+ }{
+ Title: "research",
+ Sub: true,
+ }
+
+ w.Header().Set("Content-Type", "text/html; charset=utf-8")
+ // execute the base file by name — main.html is the entrypoint
+ if err := tmpl.ExecuteTemplate(w, "main.html", data); err != nil {
+ log.Println("execute error:", err)
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ }
+ })
+
+ mux.HandleFunc("GET /bookkeeping", func(w http.ResponseWriter, r *http.Request) {
+ tmpl, err := template.ParseFS(staticRoot, "templates/main.html", "pages/bookkeeping.html")
+ if err != nil {
+ log.Println("parse error:", err)
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ data := struct {
+ Title string
+ Sub bool
+ }{
+ Title: "bookkeeping",
+ Sub: true,
+ }
+
+ w.Header().Set("Content-Type", "text/html; charset=utf-8")
+ // execute the base file by name — main.html is the entrypoint
+ if err := tmpl.ExecuteTemplate(w, "main.html", data); err != nil {
+ log.Println("execute error:", err)
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ }
+ })
+
+ mux.HandleFunc("GET /automation", func(w http.ResponseWriter, r *http.Request) {
+ tmpl, err := template.ParseFS(staticRoot, "templates/main.html", "pages/automation.html")
+ if err != nil {
+ log.Println("parse error:", err)
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ data := struct {
+ Title string
+ Sub bool
+ }{
+ Title: "automation",
+ Sub: true,
+ }
+
+ w.Header().Set("Content-Type", "text/html; charset=utf-8")
+ // execute the base file by name — main.html is the entrypoint
+ if err := tmpl.ExecuteTemplate(w, "main.html", data); err != nil {
+ log.Println("execute error:", err)
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ }
+ })
+
+ mux.HandleFunc("GET /interests", func(w http.ResponseWriter, r *http.Request) {
+ tmpl, err := template.ParseFS(staticRoot, "templates/main.html", "pages/interests.html")
+ if err != nil {
+ log.Println("parse error:", err)
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ data := struct {
+ Title string
+ Sub bool
+ }{
+ Title: "interests",
+ Sub: true,
+ }
+
+ w.Header().Set("Content-Type", "text/html; charset=utf-8")
+ // execute the base file by name — main.html is the entrypoint
+ if err := tmpl.ExecuteTemplate(w, "main.html", data); err != nil {
+ log.Println("execute error:", err)
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ }
+ })
+
+ assetsRoot, err := fs.Sub(sourceFS, "static")
+
+ mux.Handle("/static/", http.StripPrefix("/static/", http.FileServerFS(assetsRoot)))
+
+ log.Println("running on http://localhost:8081/")
+ log.Fatal(http.ListenAndServe(":8081", mux))
}
diff --git a/site b/site
index b5061d0..12c902b 100755
Binary files a/site and b/site differ
diff --git a/static/42.html b/source/42.html
similarity index 100%
rename from static/42.html
rename to source/42.html
diff --git a/static/admin.html b/source/admin.html
similarity index 100%
rename from static/admin.html
rename to source/admin.html
diff --git a/static/cinema.html b/source/cinema.html
similarity index 100%
rename from static/cinema.html
rename to source/cinema.html
diff --git a/static/cyber.html b/source/cyber.html
similarity index 100%
rename from static/cyber.html
rename to source/cyber.html
diff --git a/static/engine.html b/source/engine.html
similarity index 100%
rename from static/engine.html
rename to source/engine.html
diff --git a/static/finance.html b/source/finance.html
similarity index 100%
rename from static/finance.html
rename to source/finance.html
diff --git a/static/icon.png b/source/icon.png
similarity index 100%
rename from static/icon.png
rename to source/icon.png
diff --git a/source/index.html b/source/index.html
new file mode 100644
index 0000000..b70d288
--- /dev/null
+++ b/source/index.html
@@ -0,0 +1,208 @@
+
+
+
+
+
+
+ Samantha Vero Friis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
About Me · 2026
+
Samantha Vero Friis
+
+
Bachelor's student in Business Administration seeking an entry-level analyst or
+ finance-related role while studying. Strong numerical skills, advanced Excel, and experience in company, risk,
+ and financial analysis. Analytical, detail-oriented, and efficiency-focused.
+
+
+
+ samantha42.xyz
+ me@samantha42.xyz
+
+
+
+
+
experience
+
+
+
+
+ Independent Equity Research
+ finance
+
+
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.
+
+
+
+ Bookkeeping & Administration
+ Record keeping
+
+
Excel to In house Bookkeeping tooling and backups and safe sql databse for larger scale. made to better comply to lawmakers in KLACQ ApS(small self owned company) currently selling SaaS products. klacq website
+
+
+
+
+ Technical Tools & Automation
+ programing
+
+
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.
+
+
+
+
+
+
education
+
+
+
+
2025 — present
+
+
Bachelor of Economics & Business Administration (HA)
+
Aalborg University · Expected 2028
+
+
+
+
2024 — 2025
+
+ discontinued
+
+
+
Mathematics-Technology (BSc)
+
Aalborg University · 1 semester
+
+
+
+
+
+
2020 — 2023
+
+
HTX – Technical Upper Secondary Education
+
Viden Gymnasier
+
Mathematics A, Biology B · Study project: Mathematics & Technology
+
+
+
+
+
+
+
+
+
interests
+
+
+
+
+ Personal Free Time Interest
+ Personal
+
+
Movies, computers, PC gaming and oard games
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/infra.html b/source/infra.html
similarity index 100%
rename from static/infra.html
rename to source/infra.html
diff --git a/static/login.html b/source/login.html
similarity index 100%
rename from static/login.html
rename to source/login.html
diff --git a/source/pages/automation.html b/source/pages/automation.html
new file mode 100644
index 0000000..853ffd5
--- /dev/null
+++ b/source/pages/automation.html
@@ -0,0 +1,56 @@
+{{define "nav"}}
+
+{{end}}
+
+{{define "body"}}
+
+
+
Technical Tools & Automation
+ engineering/programing
+
+
+
+ The task here is simple: to reduce work, it's a simple investment. The choice of picking the correct
+ bottleneck is as important as the tool itself, as this gives it use. If it's never used, it never creates
+ value. The same goes for uptime, it's important that stability is almost perfect, as downtime undermines
+ the utility of having the tool. Remember that making and using a tool also creates debt for future
+ maintenance of the tool.
+
+ To adhere to this, I often choose Golang or Python as they are cheap to maintain. Golang has good
+ stability because it is easy to code and compile checks give early error detection. A word of caution on
+ AI generated tools: while they are cheap to make, the maintenance debt grows exponentially, as the code is
+ often poorly understood by the team and difficult to reason about over time.
+
+
+
+
+ Portfolio Engine
+
+
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
+ proper database, REST API, and interactive shell.
+ 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
+ advanced scenarios.
+
+
+
+{{end}}
\ No newline at end of file
diff --git a/source/pages/bookkeeping.html b/source/pages/bookkeeping.html
new file mode 100644
index 0000000..208b1e1
--- /dev/null
+++ b/source/pages/bookkeeping.html
@@ -0,0 +1,7 @@
+{{define "nav"}}
+
+{{end}}
+
+{{define "body"}}
+
+{{end}}
\ No newline at end of file
diff --git a/source/pages/index.html b/source/pages/index.html
new file mode 100644
index 0000000..b1e175c
--- /dev/null
+++ b/source/pages/index.html
@@ -0,0 +1,144 @@
+{{define "nav"}}
+
Bachelor's student in Business Administration seeking an entry-level analyst or
+ finance-related role while studying. Strong numerical skills, advanced Excel, and experience in company, risk,
+ and financial analysis. Analytical, detail-oriented, and efficiency-focused.
+
+
+
+ samantha42.xyz
+ me@samantha42.xyz
+
+
+
+
+
experience
+
+
+
+
+ Independent Equity Research
+ finance
+
+
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.
+
+
+
+ Bookkeeping & Administration
+ Record keeping
+
+
Excel to In house Bookkeeping tooling and backups and safe sql databse for larger scale. made to better comply to lawmakers in KLACQ ApS(small self owned company) currently selling SaaS products. klacq website
+
+
+
+
+ Technical Tools & Automation
+ programing
+
+
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.
+
+
+
+
+
+
education
+
+
+
+
2025 — present
+
+
Bachelor of Economics & Business Administration (HA)
+
Aalborg University · Expected 2028
+
+
+
+
2024 — 2025
+
+ discontinued
+
+
+
Mathematics-Technology (BSc)
+
Aalborg University · 1 semester
+
+
+
+
+
+
2020 — 2023
+
+
HTX – Technical Upper Secondary Education
+
Viden Gymnasier
+
Mathematics A, Biology B · Study project: Mathematics & Technology
+
+
+
+
+
+
+
+
+
interests
+
+
+
+
+ Personal Free Time Interest
+ Personal
+
+
Movies, computers, PC gaming and oard games
+
+
+
+{{end}}
\ No newline at end of file
diff --git a/source/pages/interests.html b/source/pages/interests.html
new file mode 100644
index 0000000..dfb1d76
--- /dev/null
+++ b/source/pages/interests.html
@@ -0,0 +1,139 @@
+{{define "nav"}}
+
+
+
+
+ Boy: Do not try and bend the spoon. That's impossible. Instead... only try to realize the truth.
+
+ Neo: What truth?
+
+ Boy: There is no spoon.
+
+
+
Movie/Show Top list
+
+
+
Top 5 Movies
+
+
+
+
+
Blade Runner 2049
+
+
+
+
A Cure of Wellness
+
+
+
+
The Matrix
+
+
+
+
Dracula: A Love Tale
+
+
+
+
Girl with a Dragon Tattoo
+
+
+
+
+
+
Top 5 Shows
+
+
+
+
+
Foundation
+
+
+
+
Chernobyl
+
+
+
+
Breaking Bad
+
+
+
+
Avatar: The Last Airbender
+
+
+
+
Adolescence
+
+
+
+
+
+
Lunix rice
+
+
+
I love my custom Linux setup. I use Hyprland, which automatically arranges app windows
+ on my screen so everything stays organized without dragging things around. I also use Quickshell, which
+ lets me customize menus, shortcuts, and system controls to work exactly how I want.
+ My system is based on Arch Linux or Manjaro Linux, which are versions of Linux that give you more
+ control and customization than a typical computer setup. The result is a clean, fast, and super
+ efficient desktop that’s hard to go back from.
+ Git repo
+
+
+
+
+
programing
+
+
+
+
+
+ Programming can be a task, but for me it's a source of joy. This is something I do as a hobby, and I
+ don't use AI much. It's about having fun and making a fool of yourself. It's not about how good it is,
+ in this case, I'd rather just listen to music and drink a cup of tea. I enjoy the struggle to debug, the
+ beauty in understanding why a bug is there to begin with.
+
+
+
+ The text editor I use most is VS Code, but I love the Neovim setup as it enables me to code on a
+ low-level system without a desktop environment being necessary. I do most of my coding on my own
+ desktop, synced with Git to other systems, like the server that hosts this website, which I have built
+ myself. The creation of this website is more of a fun dumb activity for me... go click on one of the
+ movie posters and see.
+
+
+
+
+
+
Games
+
+
Game i will play in my free time to wind down.
+
+ Loading stats…
+
+
+
+{{end}}
\ No newline at end of file
diff --git a/source/pages/research.html b/source/pages/research.html
new file mode 100644
index 0000000..05f0437
--- /dev/null
+++ b/source/pages/research.html
@@ -0,0 +1,72 @@
+{{define "nav"}}
+
+
subjects
+
+
opinion
+
due diligence
+
performance
+
+
+
+{{end}}
+
+{{define "body"}}
+
+
+
Equity Research
+
+
+
+
+ Story vs Fundamental value
+
+
+
+ The truth I keep coming back to is simple: find value grounded in the fundamental numbers of a company.
+
+ My approach is rooted in fundamental analysis using SEC filings (10-K, 10-Q), earnings reports, profitability, liquidity, risk factors, and long-term business sustainability. In low-transparency situations I rely on structured cross-validation across sources.
+
+ A pattern I keep seeing is CEOs speaking just close enough to reality to generate a short-term price boost, then moving the goalposts when reality catches up. What companies state in filings and what they communicate to retail or even professional investors can be two very different stories. Guidance only needs to reach far enough into the future to say almost anything.
+
+
+
+
+
Current stock analysis
+
+
+
+ MSTR: Strategy (Sell)
+ due diligence
+
+
+ The company only owns btc by issuing debt and preferred stock offering.
+
+ The company is a ponzi scheme at its best.
+
+
+
+
+
+ Novo.B/NVO: Novo Nordisk A/S (buy)
+ due diligence
+
+
+ The product sales of wieght loss drugs are highclass, pipeline is undervalued.
+
+ Pipeline and wegovy pil is not reconsiced correctly as high focus on expireation of current sold product. high pisimistic view of pipeline.
+
+
+
+
+
+
Equity portfolio performance
+
+
+
+ Loading chart...
+
+
+
+
+
+{{end}}
\ No newline at end of file
diff --git a/static/secret.html b/source/secret.html
similarity index 100%
rename from static/secret.html
rename to source/secret.html
diff --git a/source/templates/main.html b/source/templates/main.html
new file mode 100644
index 0000000..6873194
--- /dev/null
+++ b/source/templates/main.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+ Samantha Vero Friis
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{template "body" .}}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/source/tools.html b/source/tools.html
new file mode 100644
index 0000000..2c297f7
--- /dev/null
+++ b/source/tools.html
@@ -0,0 +1,50 @@
+
+
+
Technical Tools & Automation
+ engineering/programing
+
+
+
+ The task here is simple: to reduce work, it's a simple investment. The choice of picking the correct
+ bottleneck is as important as the tool itself, as this gives it use. If it's never used, it never creates
+ value. The same goes for uptime, it's important that stability is almost perfect, as downtime undermines
+ the utility of having the tool. Remember that making and using a tool also creates debt for future
+ maintenance of the tool.
+
+ To adhere to this, I often choose Golang or Python as they are cheap to maintain. Golang has good
+ stability because it is easy to code and compile checks give early error detection. A word of caution on
+ AI generated tools: while they are cheap to make, the maintenance debt grows exponentially, as the code is
+ often poorly understood by the team and difficult to reason about over time.
+
+
+
+
+ Portfolio Engine
+
+
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
+ proper database, REST API, and interactive shell.
+ 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
+ advanced scenarios.