My Self study project, plan and schedule for Senior High School 1st
Find a file
2026-09-17 21:03:01 +08:00
.obsidian asymmetric encryption section beginning 2026-09-17 21:03:01 +08:00
.gitignore exclude .trash 2026-09-10 21:40:56 +08:00
README.md asymmetric encryption section beginning 2026-09-17 21:03:01 +08:00
Schedule.md initial commit 2026-09-10 21:39:24 +08:00

Project Information

Subject Description
Subject Build a Personal Website from Scratch, Deeply Understand the Cybersecurity Behind a Website, DNS, Self-hosting, and Cryptography.
Device requirement Computer/Laptop (linux, macOS, or something that supports booting from external disk drives)
Author Iceless Usr

Introduction

Personal Website

There are several ways to self-introduce, for instances, when you back to school, you may be forced to self-introduce in front of your new classmates; Or, you completes the bio on your Instagram profile; Maybe, you also do your bio.site or linktr.ee. But all these ways are limited, like self-introducing in front of your classmates, you didn't prepare a presentation (and why?), you have no idea what to say, right? Or maybe you use bio sites, but the style is limited by the site itself.

To introduce myself on the Internet, with images, icons, paragraphs, animations and interactions, including posting system (something like blog), simple web applications, contacts, control panels, etc. What I can do is to deeply learn how to build a fully functional website from ZERO.

And of course, it's not something like just programming a HTML (Hypertext Markdown Language) from a notepad, or something that could have security panics, something that only works for yourself. It's gonna be a high-performance, fully self-hosted, security-cared, and multi user web application.

Version Controlling

To host a Git server, for my friends and me to share projects, control versions, merge codes, or team-working in a trusted space.

Cloud Drive and HTTP File Server

To host a personal cloud drive, with some simple office apps on the web, to share some files.

Tools/Utilities

Purpose Name Highlights
Operating System ArchLinux Open-source, lightweight, large community, easy to use
Container Management Docker Open-source, large community
Code Editor Zed Open-source, lightweight, good performance
Version Control Git Open-source, fully tested, universal
Package Manager Bun Open-source, fresh, good performance
Flow Diagram Draw.io Open-source, fully tested, universal
Web UI/UX Design Figma Open-source, large community, full-featured
Web Browsing/Previewing/Debuging Firefox Open-source, universal, large community, full-featured, good performance
Planning Obsidian Open-source, universal, large community, full-featured
Presentation and Documents LibreOffice Open-source, universal, large community, full-featured

Libraries/Technologies

Name Purpose Features
Hono HTTP API endpoint Fast, lightweight, built on Web Standards. Support for any JavaScript runtime.
Zod HTTP API validator TypeScript-first schema validation with static type inference
YAML Server-side configuration files A definitive library for YAML, the human friendly data serialization standard.
React Client-side virtual DOM and eco-system The library for web and native user interfaces
React-Markdown Client-side rich markdown renderer A React component that can be given a string of markdown that it’ll safely render to React elements. You can pass plugins to change how markdown is transformed and pass components that will be used instead of normal HTML elements.
Tailwind CSS Client-side compiled CSS for HTML ready A utility-first CSS framework for rapidly building modern websites without ever leaving your HTML.
TypeScript Type-safe trans-compiler for JavaScript A strongly typed programming language that builds on JavaScript, giving you better tooling at any scale.
Drizzle Server-side ORM (object relational mapping) for PostgreSQL and TypeScript A lightweight and performant TypeScript ORM with developer experience in mind.
PostgreSQL A powerful, open source object-relational database system with over 35 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance.
Forgejo A self-hosted lightweight software forge.
Easy to install and low maintenance, it just does the job.
NextCloud A modern, on-premises content collaboration platform with real-time document editing, video chat & groupware on mobile, desktop and web.
HFS 3 A web file server for your computer. Share folders or even a single file thanks to the virtual file system.
Cloudflare A global technology company that provides web security, speed optimization, and infrastructure services to make internet properties faster and safer.
PufferPanel An open source game server management panel designed to be easy to use and easy to install.
Caddy

Roadmap

A. Cybersecurity and Cryptography

Hashing

Before we put users' passwords into database, the best approach to protect sensitive information, is to hash the password.

There are some common algorithms to hash passwords:

  • Argon2
  • bcrypt

Here I'd choose the Argon2 way, because of the main features it has:

  • Memory Hardness: Argon2 requires a substantial amount of memory to process data, making it resistant to attacks using powerful hardware (e.g. GPUs and ASICs).
  • Parallelism: Designed for scalability, Argon2 can leverage multiple CPU cores to speed processing without compromising security.
  • Use of Salts: To mitigate rainbow table attacks, Argon2 employs a cryptographic salt (random data) with every password hash, ensuring unique outcomes even for identical inputs.

Hashing password is to convert any-sized input data into a unique, fixed-length string of characters and numbers using a mathematical formula.

When we're checking whether the password to validate is the correct password, we do the same thing to the password user submits to try, so we got two hashed passwords, then check whether they're same, that's how the most applications check our password, and one of the reasons why companies ask you to set a new one instead of telling you the correct one when you forget your password.

Asymmetric Encryption

Asymmetric encryption is an encryption method that uses two different keys—a public key and a private key—to encrypt and decrypt data. It’s generally regarded as more secure, though less efficient, than symmetric encryption.

SSL (Secure Sockets Layer) and TLS (Transport Layer Security)

Authentication v.s Authorization

Authentication verifies who you are, while authorization determines what you are allowed to do.

  • Authentication (Who you are): Confirms your identity using credentials like a password, PIN, or fingerprint. It always happens first.

  • Authorization (What you can do): Decides if your verified identity has permission to access a specific resource or action. It always happens after authentication.

HTTPS (Hypertext Transfer Protocol Secure)

So first we need to know what HTTP (Hypertext Transfer Protocol) is: HTTP sends data in plain text, so the risk is that anyone on the same network (e.g. public Wi-Fi) can intercept and read your passwords or messages, so best only for some services that promised to serve public assets, or static webpages.

While HTTP communicates in plain text, HTTPS (Hypertext Transfer Protocol Secure) adds an SSL/TLS certificate to scramble your data, so for applications that you logs in, you store sensitive data (e.g. banking, shopping).

AES-GCM

B. Hosting

Linux

Linux is a kernel, while Windows uses NT (New Technology) and macOS uses darwin (which bases on xnu bsd).

It's now widely used for hosting servers, super-computing, or security-researching, etc. In this case to host a server with a few services for personal usage, the best choice of course is to use Linux (and why not?).

So I chose the one I know the best, ArchLinux, a simple, lightweight distribution, which provides a clean, and powerful environment to build things, with no unused packages or applications (e.g. desktop environment, GUI applications)

Containerization

Docker

Package Managers

C. Networking

DNS (Domain Name System)

Cloudflare

Reverse Proxy

Caddy

D. Frontend

Responsive Website

UI/UX Design

Virtual DOM (Virtual Document Object Model)

React

Color P3

The reason why Color P3 is mentioned here is that Tailwind CSS declares their color only and in format of DCI-P3.

DCI-P3 (also known as Color P3) is an RGB color space defined in 2005 as part of the Digital Cinema Initiative, for use in theatrical digital motion picture distribution[1] DCDM(https://en.wikipedia.org/wiki/DCI-P3#cite_note-2). Display P3 is a variant developed by Apple Inc. for wide-gamut displays.

E. Backend

API (Application Programming Interface)

Hono

Database

PostgreSQL

References

Goal