Skip to content

big refactor of resources structure#39

Merged
bristermitten merged 23 commits into
masterfrom
feat/improvements
May 11, 2026
Merged

big refactor of resources structure#39
bristermitten merged 23 commits into
masterfrom
feat/improvements

Conversation

@bristermitten
Copy link
Copy Markdown
Member

begins work to modernise the resources collection. moves to a more database-oriented approach: meta (description about a language or tool) and individual resources now separate and combined in a script, which will avoid N+1 queries in the consumers

@bristermitten bristermitten added the enhancement New feature or request label May 11, 2026
@bristermitten bristermitten self-assigned this May 11, 2026
@bristermitten bristermitten requested a review from Copilot May 11, 2026 17:46
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors the repository’s learning resources into a more database-oriented structure by separating entity metadata (languages/topics) from individual resource entries, and introducing Bun/TypeScript tooling to generate/validate schemas and compile a consolidated database.

Changes:

  • Split monolithic resources/*.yaml topic/language files into many normalized resources/**/**/*.yaml resource records plus metadata/**/**/*.yaml entity records.
  • Add Zod-based schema definitions + generated JSON Schemas, plus a compiler script to build database.json.
  • Introduce Bun/TypeScript project config and update CI workflow to run schema generation + AJV validation.

Reviewed changes

Copilot reviewed 90 out of 93 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
tsconfig.json Adds TypeScript compiler configuration for the new Bun/TS tooling.
package.json Adds Bun scripts for schema generation and AJV validation.
bun.lock Locks Bun dependencies for schema generation/validation tooling.
biome.json Adds formatter/linter configuration for the new TS code.
.gitignore Adds standard ignores for node/bun builds, caches, IDEs, etc.
.vscode/settings.json Updates VS Code YAML schema mappings for new schema files and directory layout.
.github/workflows/validate.yml Reworks CI to use Bun + AJV validation flow.
index.ts Introduces Zod schemas and CLI schema generation for resources/metadata/database.
resource.schema.jsonc Adds generated JSON Schema for validating resource YAML records.
metadata.schema.jsonc Adds generated JSON Schema for validating metadata YAML records.
database.schema.jsonc Adds generated JSON Schema for validating the compiled database JSON.
compile-database.ts Adds a compiler to validate and compile YAML metadata/resources into database.json.
database.json Adds a compiled database output containing metadata and resources.
metadata/topics/general.yaml Adds metadata entity for the “general” topic/tag.
metadata/topics/git.yaml Adds metadata entity for “git” (tool) tag.
metadata/topics/programming-language-design.yaml Adds metadata entity for “programming-language-design” topic/tag.
metadata/languages/clojure.yaml Adds metadata entity for the Clojure language tag.
metadata/languages/cpp.yaml Adds metadata entity for the C++ language tag.
metadata/languages/haskell.yaml Adds metadata entity for the Haskell language tag.
metadata/languages/java.yaml Adds metadata entity for the Java language tag.
metadata/languages/kotlin.yaml Adds metadata entity for the Kotlin language tag.
metadata/languages/php.yaml Adds metadata entity for the PHP language tag.
metadata/languages/python.yaml Adds metadata entity for the Python language tag.
metadata/languages/rust.yaml Adds metadata entity for the Rust language tag.
metadata/languages/sql.yaml Adds metadata entity for the SQL language tag.
resources/theory/missing_semester_of_your_cs_education.yaml Adds normalized resource entry for Missing Semester (general).
resources/theory/general_projects.yaml Adds normalized resource entry for “Projects” (general).
resources/theory/programming-language-design/crafting_interpreters.yaml Adds normalized PL design resource entry.
resources/theory/programming-language-design/awesome_compilers.yaml Adds normalized PL design resource entry.
resources/platforms/codecademy.yaml Adds normalized platform resource entry.
resources/platforms/leetcode.yaml Adds normalized platform resource entry.
resources/platforms/programiz.yaml Adds normalized platform resource entry.
resources/platforms/sololearn.yaml Adds normalized platform resource entry.
resources/platforms/every_link_i_wish_i_had_as_a_beginner.yaml Adds normalized “collection of links” platform/resource entry.
resources/books/learn-you-a-haskell.yaml Adds normalized book resource entry.
resources/languages/sql/tutorial_w3schools.yaml Adds normalized SQL resource entry.
resources/languages/sql/manual_postgresql.yaml Adds normalized SQL resource entry.
resources/languages/sql/khan_academy_course.yaml Adds normalized SQL resource entry.
resources/languages/sql/codecademy_learn_course.yaml Adds normalized SQL resource entry.
resources/languages/rust/rust_book.yaml Adds normalized Rust resource entry.
resources/languages/rust/rust_by_example.yaml Adds normalized Rust resource entry.
resources/languages/rust/rust_crash_course.yaml Adds normalized Rust resource entry.
resources/languages/python/codecademy.yaml Adds normalized Python resource entry.
resources/languages/python/learn_python_the_hard_way.yaml Adds normalized Python resource entry.
resources/languages/python/python_for_everybody.yaml Adds normalized Python resource entry.
resources/languages/python/python_documentation.yaml Adds normalized Python resource entry.
resources/languages/python/python_for_data_science.yaml Adds normalized Python resource entry.
resources/languages/python/python_on_coursera.yaml Adds normalized Python resource entry.
resources/languages/php/php_manual.yaml Adds normalized PHP resource entry.
resources/languages/php/w3schools_tutorial.yaml Adds normalized PHP resource entry.
resources/languages/php/codecademy_course.yaml Adds normalized PHP resource entry.
resources/languages/php/laracasts_basics.yaml Adds normalized PHP resource entry.
resources/languages/php/php_the_right_way.yaml Adds normalized PHP resource entry.
resources/languages/php/udemy_courses.yaml Adds normalized PHP resource entry.
resources/languages/kotlin/official_website.yaml Adds normalized Kotlin resource entry.
resources/languages/kotlin/introduction_to_kotlin.yaml Adds normalized Kotlin resource entry.
resources/languages/kotlin/freecodecamp_org.yaml Adds normalized Kotlin resource entry.
resources/languages/java/tutorial_spot.yaml Adds normalized Java resource entry.
resources/languages/java/thenewboston.yaml Adds normalized Java resource entry.
resources/languages/java/mooc_fi.yaml Adds normalized Java resource entry.
resources/languages/java/javatpoint.yaml Adds normalized Java resource entry.
resources/languages/java/bro_code.yaml Adds normalized Java resource entry.
resources/languages/java/alex_lee.yaml Adds normalized Java resource entry.
resources/languages/haskell/write_yourself_in_48_hours.yaml Adds normalized Haskell resource entry.
resources/languages/haskell/haskell_wikibooks.yaml Adds normalized Haskell resource entry.
resources/languages/haskell/haskell_programming_from_first_principles.yaml Adds normalized Haskell resource entry.
resources/languages/haskell/functional_programming_supercharge_your_coding.yaml Adds normalized Haskell resource entry.
resources/languages/haskell/craft_of_functional_programming.yaml Adds normalized Haskell resource entry.
resources/languages/cpp/video_playlist.yaml Adds normalized C++ resource entry.
resources/languages/cpp/modernes_cpp.yaml Adds normalized C++ resource entry.
resources/languages/cpp/cppreference.yaml Adds normalized C++ resource entry.
resources/languages/cpp/core_guidelines.yaml Adds normalized C++ resource entry.
resources/languages/clojure/for_the_brave_and_true.yaml Adds normalized Clojure resource entry.
resources/languages/clojure/functions_explained_through_patterns.yaml Adds normalized Clojure resource entry.
resources/languages/clojure/four_clojure.yaml Adds normalized Clojure resource entry.
resources/languages/clojure/by_example.yaml Adds normalized Clojure resource entry.
resources/languages/clojure/for_java_programmers.yaml Adds normalized Clojure resource entry.
resources/languages/clojure/api_cheatsheet.yaml Adds normalized Clojure resource entry.
resources/languages/clojure/beginner_resources.yaml Adds normalized Clojure resource entry.
resources/sql.yaml Removes old monolithic SQL resource collection file.
resources/rust.yaml Removes old monolithic Rust resource collection file.
resources/python.yaml Removes old monolithic Python resource collection file.
resources/php.yaml Removes old monolithic PHP resource collection file.
resources/java.yaml Removes old monolithic Java resource collection file.
resources/kotlin.yaml Removes old monolithic Kotlin resource collection file.
resources/haskell.yaml Removes old monolithic Haskell resource collection file.
resources/cpp.yaml Removes old monolithic C++ resource collection file.
resources/clojure.yaml Removes old monolithic Clojure resource collection file.
resources/programming-language-design.yaml Removes old monolithic PL design topic file.
resources/general.yaml Removes old monolithic General topic file.
resources/miscellaneous.yaml Removes old monolithic Miscellaneous/platforms file.
resources/callisto.yaml Removes old monolithic Callisto file (not yet reintroduced under new structure in this PR).
resource.schema.json Removes the previous schema in favor of generated v2020-12 .jsonc schemas.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread package.json Outdated
Comment thread index.ts
Comment thread index.ts Outdated
Comment thread package.json
Comment thread .vscode/settings.json
Comment thread index.ts Outdated
@bristermitten bristermitten merged commit c594a1c into master May 11, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants