/* catcrafts.net Copyright (C) 2025 Catcrafts The source code of this website is made available for viewing purposes only. No permission is granted to copy, modify, distribute, or create derivative works. */ export module Catcrafts:Blog; import Crafter.CppDOM; import std; using namespace Crafter; export namespace Catcrafts { struct BlogPost { std::string name; std::string slug; std::string date; std::string content; }; std::vector posts { { "In WASM, Exit doesn't mean done.", "in-wasm-exit-doesnt-mean-done", "2025-11-14", R"(So if anyone looked at the source code for this website pefore this post you would have seen that every is allocated with new, for example this very blog was defined as std::vector posts = new std::vector{...

Reason for this was that everything became corrupted when callbacking from JS, not knowing sure as to why this was the fastest solution, but after debugging the problem became clear.

When we reach the end of int main() from the eyes of C++ we're finished, deconstruct everything and wrap it up. Unkowing that we just registered a bunch of event handlers with JS.

This caused all the memory corruption errors since everything was destructed.

Luckily this is a very simple fix of adding -fno-c++-static-destructors, and things like this are is also the reason i use clang instead of gcc.

So now all examples and this site have been updated to use normal variables again.

Stick around for the next post for the CI/CD nightmare (not for the faint of heart))" }, { "Hello World!", "hello-world", "2025-11-12", R"(Welcome to catcrafts.net!

Here we believe optimization is everything and C++ is a gift from god.
This blog will mostly be dedicated to random tidbits i come across while working on my Crafter series of libraries.

Like this website which is fully written in C++ using the Crafter.CppDOM library.
And source available too!
https://forgejo.catcrafts.net/Catcrafts/catcrafts.net)" } }; void RenderBlog(); void RenderBlogPost(const std::string_view slug); }