How I made this site
#include "common.h"
int main()
{
usagi::Page page = begin_making_page();
std::string meow = "Building weird stuff people don't dare doing";
std::vector<ProjectCard> notable_projects = {
{
"libUsagi",
"HTML generator for C++, written in C++."
" Most common HTML tags are implemented, so you don't need to know"
" HTML tags to write a website. HTMX support is planned.",
"https://codeberg.org/hourin/libUsagi"
},
{
"Izuna",
"In-memory DBMS with the ability to sync to file (with a custom data format),"
"for C++. Filter is also available with izuna::FilterOpt and lambdas.",
"https://codeberg.org/hourin/Izuna"
},
{
"Izuna.NET",
"Izuna for C# (tested on .NET only). This Izuna version allows using LINQ for"
" better database set operations. The IZUNA data format isn't implemented, but"
" can sync to JSON.",
"https://codeberg.org/hourin/Izuna.NET"
},
{
"Miyako-rs",
"Alternative build tool and dependency management tool for Java,"
" written in Rust. Config file uses S-expressions.",
"https://codeberg.org/hourin/Miyako-rs"
},
};
std::vector<ProjectCard> planned_projects = {
{
"SSaeki",
"Game engine for Codename: Saejima (inner circle stuff, but I think it's cool"
" to public the engine).",
"https://codeberg.org/hourin/SSaeki"
},
{
"UsagiBooru",
"An image board site (similar to Danbooru or Gelbooru) written in"
" C++ using httplib and libUsagi for the front-end, back-end not planned yet"
" (but will probably be written in C#).",
},
{
"Plana7",
"An Operating System with its own programming language.",
},
{
"UsagiDocs",
"Documentation generation program written in C++ using libUsagi."
}
};
const std::string aboutMe[] = {
"I like learning languages, both human and machine languages.",
"Human languages I can do: Vietnamese, English, Japanese."
" Currently fighting with Tagalog.",
"Machine languages I can do: C, C++, Rust (a little), C#, X86-64 ASM (NASM)."
" Trying to learn OCaml.",
};
const std::vector<std::string> tools = {
"OS: EndeavourOS with Hyprland (<u>lightly riced</u>)",
"Terminal: st (I only added scrolling and transperency)",
"File manager: ranger (not customized at all)",
"Editor: Neovim (also <u><b>lightly</b></u> riced)",
};
page.body_section([&](usagi::Page &p)
{
p.begin_div("center")
.header(1, "HELLO, I'm HOURIN")
.end_child();
p.begin_div("meow")
.paragraph("<i>" + meow + "</i>")
.end_child();
for (const auto ¶: aboutMe) {
p.begin_div("center")
.paragraph(para)
.end_child();
}
p.begin_div("center").header(2, "Tools I use:").end_child();
p.begin_div("center");
insert_list(p, tools);
p.end_child();
p.begin_div("blink center")
.header(2, "Notable projects:")
.end_child();
p.begin_div("center");
for (const auto &project: notable_projects)
p.div_section("card", [&](usagi::Page &p)
{
project.add_to_div_section(p);
});
p.end_child();
p.begin_div("center")
.header(2, "Planned and ongoing projects:")
.end_child();
p.begin_div("center");
for (const auto &project: planned_projects)
p.div_section("card", [&](usagi::Page &p)
{
project.add_to_div_section(p);
});
p.end_child();
auto header = usagi::make_header(2, "View page source");
auto link = usagi::make_link(std::move(header), "source.html");
p.begin_div("center")
.add_element(link)
.end_child();
});
output_to_stdout(insert_footer(page));
return 0;
}