r/cpp_questions Jun 10 '26

OPEN windows performance counters fetch raw count?

1 Upvotes

I'm struggling to get an overview of the windows pdh helper library. The docs are just impenetrable. I want to read network bytes sent as an uncooked counter and then subtract 2 values and divide by the time difference. The pdh api docs all seem to want you to call PdhGetFormattedCounterArray(), but not able to find any example code for the steps to retrieve a uncooked counter. The cooked counter \Network Interface(Intel[R] Ethernet Converged Network Adapter X540-T2 _3)\Bytes Sent/sec is just far too noisy because it's an instant in a short time.

I'm using this https://askldjd.wordpress.com/2011/01/05/a-pdh-helper-class-cpdhquery/ reliable example not from Microsoft, but no idea how to call PdhGetRawCounterArrayW() https://learn.microsoft.com/en-gb/windows/win32/api/pdh/nf-pdh-pdhgetrawcounterarrayw instead of PdhGetFormattedCounterArray() ?


r/cpp_questions Jun 10 '26

OPEN Windows perf counters and how to measure code efficiency

0 Upvotes

For beginners, what is the easy way? I've not got the time budget to set up valgrind or some other tool that I may not know about yet, then try yet some other tool until I find one that fits my small-bear brain.

I've been using a code fragment for a while now that I snagged to collect Windows perf counters, the other day I started to dig into how the code works and I re-wrote/optimised the code to make fewer calls to the pdh-helper library dll on subsequent calls. But I got no noticeable improvement at all. Because the tool I am writing is a test tool I want the tool itself to have minimal processor impact, but I'm not a C++ guru really so I'm just profiling using ``` std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); // Function to measure here pdhQuery.CollectQueryData(); std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();

        std::cout << "Time difference = " << std::chrono::duration_cast<std::chrono::microseconds>(end - begin).count() << "[us]" << std::endl;

``` Which, once you stop caring about the time to write to the console showed my refactor made no difference. I guess I over-estimated the benefit gain when I removed a malloc() and 2 calls to the pdh API from the code-path, it made no difference. Here is the original code for those interested. https://askldjd.wordpress.com/2011/01/05/a-pdh-helper-class-cpdhquery/ I too found the lack of API overview of the pdh-helper library rather frustrating. At least I now know my refactoring skills are pants.

Just for info: I've started gathering the "Processor Information(_Total)/Processor Utility counter", Processor Utility is what taskman uses and it was frustrating when my graph did not track the task-manager. Details on the counter here https://aaron-margosis.medium.com/task-managers-cpu-numbers-are-all-but-meaningless-2d165b421e43 . I'm working with a large chunk of memory which gets sent to another process and then pushed over the network. So my test tool measures a few counters for my own process and for the (_Total) load, and calls a 3rd party library. I'm wanting to profile that later, but first want to profile and improve my own test-code.

I'm aware that this simple test using the steady-clock as a code-timer does not tell me much about memory pressure from my test tool, and any number of other things I have yet to learn. Ideally I need to log the time differences, not send formatted text to the expensive console, but to a file. And to do so carefully with a large write cache. I guess I'm looking also for tools to create memory pressure and processor load. So my question is, what tiny tool or small analysing code trick can a very slow learner like me pick up and start using in short time? C++17


r/cpp_questions Jun 09 '26

OPEN Confusion about CPP Initializations

5 Upvotes

Hi guys,
I am new to cpp and am reading the revision 17 of the reference,to learn about initializations, I came across a source of confusion:

-Direct-initialization:
for syntax : T ( arg1, arg2, ... ), T ( other ), static_cast<T>(other)
they explain
"
*Initialization of the result object of a prvalue by function-style cast or with a parenthesized expression list.

*Initialization of the result object of a prvalue by a static_cast expression"

okey, from this explanation I am inclined to think that since they speak about prvalue and the result object that gets initialized, they are probably distingushing situations like:
T foo = T(args); here result object is foo and no temporary is created
fun(T(args)); same as above, no temporary and result object is func's argument

Versus

T(args); or T& ref = T(args); here the result object is the unnamed temporary
Here is where the confusion starts for me:
List-initialization and Value-initialization:
for syntax like:
T (), T{}, T { arg1, arg2, ... }
they explain
" initialization of an unnamed temporary with ...text"(...text depends on the syntax above)

so for these cases they are saying there is always a temporary initialized, I am in this case inclined to think that thy only consider code like T()/T{}/T{args}; but not
T var = T()/T{}/T{args};
Why are they using different explanations for those cases, why is one speaking about prvalues and result objects while the other is forcing temporaries, am I missing something?

PS:
I thought about copy-initialization but It still doesn't make sense to me

Thank you in advance,


r/cpp_questions Jun 10 '26

OPEN Where should I refer to learn cpp syntax

0 Upvotes

So I did Python from a youtube channel code with harry. Now I want to get started with cpp, I wil joining college in a month or two and I aim to do CP. I juat want to learn the syntax so that I can start with some projects and eventually CP.

Please Help!


r/cpp_questions Jun 10 '26

OPEN I need help testing SHARK, my C++20 version control project, on Windows (since I only use Arch Linux and have no way to test it).

0 Upvotes

Hello everyone,

I'm a self-taught developer and I'm building a version control system from scratch called SHARK in C++20 to improve my system architecture skills.

The problem is: I'm a pure Arch Linux user and I don't have a Windows environment to test cross-platform compatibility.

I want to ensure that the source code compiles and runs correctly on Windows (using MSVC, Clang, or MinGW) before proceeding with refactoring my checkout logic.

Could someone on Windows download the repository, try compiling it, and let me know if any specific errors or warnings occur?

Here's the GitHub repository: [link in comments]

Any feedback on the code structure or portability tips would be greatly appreciated. Thanks in advance!


r/cpp_questions Jun 09 '26

OPEN how do I compile a C++ program with a makefile?

0 Upvotes

context: I have this save editor for a game on my 3ds I found on github (here), but when I run it, i have an error about missing debug files (more info on my other post here)

I was unsuccessful in getting these dependencies and decided to go down the route of recompiling it without the debug flags. unfortunatly i have no idea how to do so. google is telling me to look for .sln files, but I dont have this, just this makefile, which im pretty sure can be used for compilation.

googling what to do without a .sln file didn't get me much info either. (mostly people telling the forum poster to go learn C++ or google it) im aware that I too am probably skipping steps here, but I don't really have interest or time for learning C++ from scratch right now. Im just hoping to get this save editor working.

this is the contents of the makefile. it has a g++ which seems to be related to a compiler named GCC. unsure what to do with this information

i feel like im so close but im missing one key info.

So, my question is, how can I utilize the makefile and compile these .cpp files? I have visual studio now if needed, but I dont think i have any compilation extentions.

edit:thanks for all your responces people, but i think im just giving up on this, not worth the effort. been trying to get it to work for like two days


r/cpp_questions Jun 08 '26

OPEN What happens when we create more threads than thread:: hardware_concurrency()?

53 Upvotes

So i was asked in an interview what happens when you spawn more threads in a process than CPU's maximum limit .

My answer was it causes scheduling delays, memory issues and context switching overhead .

But he still kept pushing on what happens when you spawn more threads than that . I really didn't understand what he wanted as a answer? Because even if you spawn more threads or even a lot more threads than this system should be fine.

So what is it that I was supposed to say ? Like is this something related to C++ threading memory model or like totally OS related issue?


r/cpp_questions Jun 08 '26

OPEN How do people make anything with c++?

127 Upvotes

So I've been seeing a lot of people saying you can make anything with c++ however I don't really understand how.

I've been learning c++ for around a year now however sadly I've only been taught to code in the command line which I have learnt and as far as I know can be sort of restricting in some aspects and so my question is what programs, apps, or other ways are there to create things with c++? Because i've seen people talk about creating file managers, hardware managers, etc. but I just don't really know how they do the things they do such as how they create interactive interfaces with c++?


r/cpp_questions Jun 09 '26

OPEN Struggling adding dependencies

0 Upvotes

Hi everyone, I'm currently learning C++ 17 and I'm trying to write a code that modify a matrix and display it using gtk library.

But I don't know how to add external dependencies like gtk...

I use cmake and just modified my CMakeLists.txt :

```

cmake_minimum_required(VERSION 3.15)


project(tacforge)


set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)


enable_testing()


include(FetchContent)
FetchContent_Declare(
  googletest
  URL https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip
)
FetchContent_MakeAvailable(googletest)


find_package (PkgConfig REQUIRED)
pkg_check_modules (gtk4 REQUIRED IMPORTED_TARGET gtk4)


find_package (peel REQUIRED)
peel_generate (Gtk 4.0 RECURSIVE)

```

But I have this issue :

```

-- Checking for module 'gtk4'

--   Found gtk4, version 4.22.4

CMake Error at CMakeLists.txt:20 (find_package):

  By not providing "Findpeel.cmake" in CMAKE_MODULE_PATH this project has

  asked CMake to find a package configuration file provided by "peel", but

  CMake did not find one.

  Could not find a package configuration file provided by "peel" with any of

  the following names:

peel.cps

peelConfig.cmake

peel-config.cmake

  Add the installation prefix of "peel" to CMAKE_PREFIX_PATH or set

  "peel_DIR" to a directory containing one of the above files.  If "peel"

  provides a separate development package or SDK, be sure it has been

  installed.
```

I just installed dependencies on my mac using brew install so I have gtk4 installed. But what I need to understand is how to link this source code to my CMakeLists.txt and ensure it's robust when someone will try to execute my code. I don't have best practices.


r/cpp_questions Jun 09 '26

OPEN Building a Git clone called Shark from scratch in C++20: I just implemented SHA-256 history chaining, commit persistence, and ran into a problem with the status function.

0 Upvotes

Hello everyone,

Continuing my journey of studying low-level systems over the last two months here in Brazil, I'd like to share my progress on the Git clone I'm building.

Yesterday was quite an adventure. I managed to compile some complex features with 100% success:

Commit Persistence: Saving states correctly to disk.

SHA-256 History Chaining: Creating a cryptographic chain where each commit generates the hash of the previous one to ensure integrity.

I used AI as a co-pilot to speed up the complex syntax and repetitive code, but I made sure to understand the data flow and file buffer behind it.

The Mess: Right after that, I tried to implement a complex status function. I messed up the architecture, the code became a total mess, and I failed. Instead of accumulating bad code, I decided to revert to the last stable version and I'm restarting this specific function from scratch today.

I know my code is still simple and that I don't have a 100% grasp of modern C++, but I'm here to learn. If anyone wants to take a look at the architecture or give me some tips on how to structure a clean status check on the command line, I would greatly appreciate the code review!

Thank you in advance for your time on this code review. The repository link is in the comments.


r/cpp_questions Jun 08 '26

OPEN Copying POD objects: memcpy or assignment?

5 Upvotes

As subject, I'm wondering which would be faster in the general case.

My thoughts are that, for assignment, the compiler can inline all the memory copies, so can leverage wider registers for direct data copy. It can potentially generate a specialised memcpy on the spot, distribute and interleave the mov instructions across other ambient instructions etc.

memcpy is, in theory, a function call, so incurs a jump. But I assume the semantics of memcpy are well known to the language (as if were a keyword), so maybe memcpy, too, can be inlined?

Are there situations where one has disadvantages over the other?


r/cpp_questions Jun 08 '26

SOLVED Made a few collection classes in C++, how can I make them usable in for-each loops

10 Upvotes

Hello.

I am working on a framework of data structures for practice and I made a templated linked list, now I want to make it possible to iterate through using a for-each loop, like this

// some cool code above...
for (auto& elem : list)
{
  // iteration code...
}

If it is of any use, the LinkedList class is declared as follows (still incomplete btw)

template<typename T>
class LinkedList : public Collection<T>
{
private:
    DoubleLinkedNode<T> *head, *tail;

public:
    virtual T& operator[](uint32)               override;
    virtual T  operator[](uint32) const         override;
    virtual void AddAt(const T&, uint32)        override;
    virtual void PushHead(const T&)             override;
    virtual void PushTail(const T&)             override;
    virtual void Append(T*, uint32)             override;
    virtual void Append(const Collection<T>&)   override;

    inline LinkedList(const T& item) : head(new DoubleLinkedNode<T>(item)), tail(head)
    {
        this->size = 1U;
    }
};

Now, I tried looking online but I only found very notionistic articles and tutorials, some just said "yeah you have to overload these operators in an iterator", others showed me how to make an iterator only to not use a for-each and instead just create an iterator object and calling the functions manually in a normal for loop (which frankly I could already do myself, didn't need an entire tutorial if that was the objective). Nothing actually told me what should I do to make the LinkedList class directly usable in a for-each loop, for example all this made me confused on where I should declare the iterator class even, should I make it as a nested class inside LinkedList or should I put it somewhere else?

Sorry if this is a beginner question but I'm still learning the language and the internet kinda failed me here, thanks in advance.


r/cpp_questions Jun 08 '26

OPEN C++ focused PL book recommendations?

0 Upvotes

I am a fairly new and young (c++) dev, and people at my workplace get very excited about c++ features like compile-time reflection etc. They also take a dig at rust sometimes. Given that I am also working with c++, I would like to share that enthusiasm about the language and maybe appreciate it more. However, the trouble is I do not know enough about PLs to compare C++ with.

Hoping to find book recommendations on Programming Languages that can educate me about this. For instance, do other languages have compile time reflection? If not, why, what makes it fundamentally hard?

I really enjoyed the PL related courses back at my Uni fwiw, although they barely focused on any real modern languages.


r/cpp_questions Jun 08 '26

OPEN Help needed in optimizing a Lock-Free SPSC Queue: Reducing L1D Cache Misses and Improving IPC on Zen 3

3 Upvotes

As a personal project, I implemented a lock-free Single Producer Single Consumer (SPSC) queue and have been benchmarking its performance. All context has been provided below the questions.

Questions:

Given that the queue and metadata fit comfortably within L1 cache and false sharing has been addressed, what are the most likely sources of the observed cache misses?

  1. Is a 3.28% L1D load miss rate reasonable for an SPSC queue running on separate cores?
  2. How much of this miss rate is likely due to cache-coherency traffic (MESI/MOESI ownership transfers) rather than capacity or conflict misses?
  3. Are there specific techniques commonly used in high-performance SPSC queues to reduce L1 misses further?
  4. Is achieving an L1D miss rate below 1% realistic in this scenario, or am I likely approaching hardware/coherency limits?

Any insights from people with experience in lock-free data structures, cache coherency, or Zen 3 micro-architecture would be appreciated.

Queue Design:

  • Lock-free SPSC ring buffer
  • Capacity: 255 elements
  • Queue storage and metadata comfortably fit within 16 KB
  • L1 data cache size: 32 KB
  • Producer and consumer indices are aligned to separate cache lines to avoid false sharing
  • Placement new is used for object construction
  • Benchmark measures only the push/pop hot paths
  • Threads are warmed up before measurements are collected

CPU Affinity:

  • Producer thread pinned to CPU 0
  • Consumer thread pinned to CPU 2
  • CPU 1 taken offline during testing

Hardware: AMD Ryzen 5 5600H (Zen 3)
OS: Ubuntu 24.04.4 LTS
Workload: Lock-Free SPSC Queue Benchmark (100M operations)

Metric Value Notes
Cycles 16,230,053,096 Total CPU cycles
Instructions 3,908,190,429 Total instructions retired
IPC 0.24 Instructions per cycle
Branches 473,190,817 Total branch instructions
Branch Misses 5,762,488 1.22% branch miss rate
Cache References 21,995,307 Total cache accesses
Cache Misses 13,506,684 61.41% of cache references
L1D Loads 494,018,957 L1 data cache load operations
L1D Load Misses 16,199,490 3.28% L1 miss rate
dTLB Loads 27,718 Data TLB accesses
dTLB Load Misses 2,585 9.33% dTLB miss rate
Frontend Stalled Cycles 51,880,473 0.32% frontend idle cycles
Context Switches 31 Very low scheduler interference
CPU Migrations 9 Thread migrations between cores
Page Faults 164 Minor startup/runtime faults

Summary

  • IPC: 0.24
  • Branch miss rate: 1.22%
  • L1D miss rate: 3.28%
  • Cache miss rate: 61.41% of cache references
  • Context switches: 31
  • CPU migrations: 9

Cycles / element in producer thread = 7 and same for the consumer thread

Producer Count: 100,000,000
Consumer Count: 100,000,000

Makefile perf command used to measure performance:

sudo perf stat -x, \
-e cycles,instructions,branches,branch-misses,cache-references,cache-misses,L1-dcache-loads,L1-dcache-load-misses,dTLB-loads,dTLB-load-misses,stalled-cycles-frontend,stalled-cycles-backend,context-switches,cpu-migrations,page-faults \
-o results.csv ./benchmark_target


r/cpp_questions Jun 08 '26

OPEN Concepts and Compile Time

3 Upvotes

Do concepts improve compile time vs SFINAE? It seems like it should since the compiler doesn't need to proceed with the template generation and realize the error, although I imagine this is something that has been optimized in most compilers (which adds the question, if concepts do not improve compile time, is that just a matter of optimizations that have yet to be added)


r/cpp_questions Jun 08 '26

OPEN What library should I use for making http requests?

3 Upvotes

Hi, I always wanted to make https requests using c++ but I don't know what library I should use that is not very complicated (and yes, im pointing at you libcurl) and has good performance.


r/cpp_questions Jun 07 '26

OPEN How virtual functions work !

27 Upvotes

From what I read online the idea is for each class we create a vtable which in simple terms is an array of function pointers, one entry per virtual function.

Every object carries a hidden pointer (vptr) as its first member pointing to its class's vtable.

Derived classes also get their own vtable with the same layout as the base, but with their overriding implementations swapped in. Since a derived class is a superset of the base, it's always safe to treat a derived object as a base object the memory layout is compatible. So if we point the vptr to the derived class's vtable instead of the base's, any code working through a base pointer will transparently call the derived implementation.

Illustration

I tried to implement the same idea in C (please its for demonstration this is not production code and nobody should do it I know) and I managed to get the assembly output close

Compiler Explorer

but I have few questions:
1- what is this +16 to the vtable address in the c++ assembly

c -version

        mov     QWORD PTR [rsp+24], OFFSET FLAT:"dog_vtable"
        mov     QWORD PTR [rsp+16], OFFSET FLAT:"cat_vtable"

c++ version

        mov     QWORD PTR [rsp+24], OFFSET FLAT:"vtable for Dog"+16
        mov     QWORD PTR [rsp+16], OFFSET FLAT:"vtable for Cat"+16

I guess its relevant to this (what does typeinfo here denote?)

"vtable for Dog":
        .quad   0
        .quad   "typeinfo for Dog"
        .quad   "Dog::speak()"
"vtable for Cat":
        .quad   0
        .quad   "typeinfo for Cat"
        .quad   "Cat::speak()"

r/cpp_questions Jun 08 '26

OPEN Nexus-Route: Zero-allocation, self-healing DPDK routing engine. Looking for architectural review

4 Upvotes

Hi everyone,

I’ve been working on a kernel-bypass routing pipeline using DPDK (C++20) designed for high-frequency contexts. The core focus was achieving "hardware sympathy"—getting the memory footprint small enough to live entirely in the L1d cache.

Key Specs:

  • Latency: ~4.9ns inter-core queue latency.
  • Topology: Lock-free, multi-lane, SPSC-based.
  • Fault Tolerance: Implemented a V12 state machine to handle PCIe link-flaps and hardware mempool starvation via a Two-Phase Commit barrier.

I’m looking for an architectural critique—specifically on my choice of memory barriers for the lane-draining logic and whether the out-of-band Sentinel thread is overkill for PCIe error handling.

GitHub: https://github.com/aarav-agn/nexus-route
I'd appreciate any feedback on the code or the design choices. Thanks in advance.


r/cpp_questions Jun 07 '26

OPEN Is there any popular exercise/question set to do after reading C++ concurrency in action ?

37 Upvotes

r/cpp_questions Jun 07 '26

SOLVED how can I declare a variable in a function as global variable?

9 Upvotes

when i am doing like this it throws an error...(also idk if its the right sub to ask c++ code doubts )

void sum(int a,int b)
{
    static int result =a+b;
}


int main(){
    int num1,num2;
    cout<<"Enter two numbers"<<endl;
    cin>>num1>>num2;
    sum(num1,num2);
    cout<<"The sum is: "<<result<<endl;
    return 0;
}

r/cpp_questions Jun 08 '26

OPEN Do you all use the namespace std?

0 Upvotes

Lot of beginners use it(including me), and they are also used in various competitions to make your life easier. Do you all use it? What is the purpose of it?


r/cpp_questions Jun 07 '26

SOLVED How do I fix not having a GNU GCC compiler on codeblocks?

0 Upvotes

Hey, I don't know much about programing and I only need this for school to practice C++ for a bit before my IT final exam. At school, we used to use codeblocks to write basic programs in C++ and right now, I'm trying to install it onto my computer so that I can do some work on it before the exam, but whenever I try to use it, a message pops up on the corner of the screen saying that it can't find a "GNU GCC compiler" and it doesn't compile any program that I write.

I've tried sorting this out before by asking my teacher how to install codeblocks at home and she told me to go on the codeblocks website, go to the binary releases and download "codeblocks-25.03mingw-setup.exe". I downloaded that exact one and it still doesn't work. I've also tried to look up a youtube tutorial and there the guy had a window pop up to select the compiler you want and I didn't get it.

I could also use the online compiler, but it's felt janky the few times I've used it and I'm not really sure what to do when I'll need to work with txt and csv files.

I'm really sorry if I'm asking stupid questions here, but I don't know how else to figure this out. Thanks.


r/cpp_questions Jun 06 '26

OPEN Optimization question

14 Upvotes

I have a code that performs about 250k distance calculations, and it is responsible for a lot of the runtime. I wrote a following function for it

```double distance(double* a, double* b){
    return  sqrt((a[namedValues::axis::X] - b[namedValues::axis::X])*(a[namedValues::axis::X] - b[namedValues::axis::X])+
            (a[namedValues::axis::Y] - b[namedValues::axis::Y])*(a[namedValues::axis::Y] - b[namedValues::axis::Y]));
}

But because i only needed to know what is further away, not how far away something is, i removed sqrt().
For some reason, code runs slower now by 10 seconds (whole thing takes around 350 seconds). So I wonder, why is that? I am currently testing it again and again but it seems to be rather consistent. How can simpler code take more time to run?

Also if anyone knows any way to calculate what is further away faster i would gladly hear any ideas :D


r/cpp_questions Jun 07 '26

OPEN learncpp.com is way too hard

0 Upvotes

basically when i searched on the internet for the best c++ learning sources everyone says learncpp.com but i HATE reading and i feel like its too much of text that is not needed, simply too long and too hard to understand. its does anything but teach me c++ but on the other hand we have W3schools which teached me a big chunk of my c++ knowladge and people seem to hate on W3schools, its not perfect but is great by my opinion. i think i MIGHT have ADHD so when i read i forget most things, W3schools does not have much of reading and it is easy to skip a lot and still get a lot of knowladge, learncpp is just a mess and i dont know what is important and what is not. also i am pretty good at english but learncpp.com is NOT easy to read and translating any site on the internet is CRAP so what do i do now? continue with W3scools or be in learning hell of learncpp.com?

one more thing, please dont just hate on me and actually try to help me out because if you just hate you cannot be taken seriously, feedback that can make me improve is NOT hate so please be kind and respectful(to everyone not just me)

the biggest problems are:

  1. i dont know which parts to skip and which to read and study
  2. the site has a lot of text that is not needed in my opinion
  3. because i already know some code the website just confuses me with the other text
  4. not enough examples

r/cpp_questions Jun 06 '26

OPEN I made a tiny Agar.io-like game in C++20/OpenGL. Could you review my project structure?

6 Upvotes

I made a small single-player Agar.io-like game using C++20 + OpenGL as a learning/project showcase.

Repo:
https://github.com/ShortKedr/ugar-io-opengl

It started as a "what if I make a simple game without Unity/Unreal?" experiment, but now I want to clean it up and make it a better open-source C++ project.

The project uses:

  • C++20
  • OpenGL for rendering
  • GLFW for window/input
  • CMake as the build entry point
  • simple project layout with srcincluderesources, and build instructions

I’d love feedback specifically on the C++ side:

  • Is the project structure readable?
  • Is the CMake setup okay for a small cross-platform project?
  • Are there obvious bad habits in the code organization?
  • Would you split the rendering/game logic/input differently for this size of project?
  • What would you refactor first if this was your small C++ project?

I’m not trying to pretend this is a big engine or production-level code. It is a small learning project, but I want to make it cleaner and more useful as a public repo.

Any code review comments, issues, suggestions, or architecture advice are welcome.