From 7817cd1dac0e568f55cbc3adb44cc18f59996d11 Mon Sep 17 00:00:00 2001 From: "Paul W." Date: Tue, 28 Jul 2026 21:43:31 -0400 Subject: [PATCH 1/2] Switch to static odin generator --- .eslintrc.json | 3 - .gitignore | 11 +- README.md | 2 - bun.lockb | Bin 316016 -> 0 bytes public/external.json => external.json | 0 generator.odin | 587 +++++++++++++++++++++ next-env.d.ts | 5 - next.config.ts | 49 -- notes/references.md | 6 +- notes/resources.md | 38 +- notes/retro-gaming.md | 18 +- package.json | 41 -- {src/app => public/assets}/global.css | 41 +- public/home.json | 14 - scripts/generate-metadata.js | 131 ----- shims.d.ts | 9 - src/app/about/page.tsx | 43 -- src/app/components/container.tsx | 9 - src/app/components/note-entry.tsx | 17 - src/app/components/quick-links.tsx | 24 - src/app/components/recent-notes.tsx | 40 -- src/app/components/recent-posts.module.css | 52 -- src/app/components/recent-posts.tsx | 50 -- src/app/components/title.module.css | 30 -- src/app/components/title.tsx | 68 --- src/app/layout.tsx | 18 - src/app/lib/date.ts | 132 ----- src/app/lib/read-markdown.ts | 9 - src/app/lib/site.ts | 11 - src/app/not-found.tsx | 35 -- src/app/notes/[note]/note.module.css | 7 - src/app/notes/[note]/page.tsx | 66 --- src/app/notes/page.tsx | 39 -- src/app/page.tsx | 33 -- src/app/posts/[post]/page.tsx | 85 --- src/app/posts/page.tsx | 49 -- src/app/sitemap/page.tsx | 41 -- src/app/styles/post.module.css | 41 -- tsconfig.json | 37 -- 39 files changed, 661 insertions(+), 1230 deletions(-) delete mode 100644 .eslintrc.json delete mode 100644 bun.lockb rename public/external.json => external.json (100%) create mode 100644 generator.odin delete mode 100644 next-env.d.ts delete mode 100644 next.config.ts delete mode 100644 package.json rename {src/app => public/assets}/global.css (90%) delete mode 100644 public/home.json delete mode 100644 scripts/generate-metadata.js delete mode 100644 shims.d.ts delete mode 100644 src/app/about/page.tsx delete mode 100644 src/app/components/container.tsx delete mode 100644 src/app/components/note-entry.tsx delete mode 100644 src/app/components/quick-links.tsx delete mode 100644 src/app/components/recent-notes.tsx delete mode 100644 src/app/components/recent-posts.module.css delete mode 100644 src/app/components/recent-posts.tsx delete mode 100644 src/app/components/title.module.css delete mode 100644 src/app/components/title.tsx delete mode 100644 src/app/layout.tsx delete mode 100644 src/app/lib/date.ts delete mode 100644 src/app/lib/read-markdown.ts delete mode 100644 src/app/lib/site.ts delete mode 100644 src/app/not-found.tsx delete mode 100644 src/app/notes/[note]/note.module.css delete mode 100644 src/app/notes/[note]/page.tsx delete mode 100644 src/app/notes/page.tsx delete mode 100644 src/app/page.tsx delete mode 100644 src/app/posts/[post]/page.tsx delete mode 100644 src/app/posts/page.tsx delete mode 100644 src/app/sitemap/page.tsx delete mode 100644 src/app/styles/post.module.css delete mode 100644 tsconfig.json diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index bffb357..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/.gitignore b/.gitignore index 6a47554..d9a26d6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,6 @@ -node_modules/ -dist/ -.next/ .DS_Store -.cache/ -*.bun **/.*.md .env -public/posts.json -public/notes.json -public/sitemap.json +build/ +*.pdb +*.exe \ No newline at end of file diff --git a/README.md b/README.md index d280373..af80c4c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ # PaulW.XYZ -A [Next.js](https://nextjs.com) website that mainly involves generating content out of a bunch of markdown files contained in `notes/` and `posts/` which contain rough, unorganized yet useful information and thought-out articles respectively. - ## Third-Party Licenses Any trademarks listed on this site are the property of their respective owners. This site neither endorses nor is affiliated with any of the owners. Any source code available on any of the pages is without warranty of any kind and the use of such is at your own risk. diff --git a/bun.lockb b/bun.lockb deleted file mode 100644 index 314679668b71667bcfb3860381dfe2e24934d1e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316016 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 VP9o5R`2^!%>{0pu`hWV*{{imuMi>A9 diff --git a/public/external.json b/external.json similarity index 100% rename from public/external.json rename to external.json diff --git a/generator.odin b/generator.odin new file mode 100644 index 0000000..d711b46 --- /dev/null +++ b/generator.odin @@ -0,0 +1,587 @@ +package www + +import "core:sort" +import "base:runtime" +import "core:bufio" +import "core:c" +import "core:encoding/json" +import "core:fmt" +import "core:os" +import "core:strings" +import md "vendor:commonmark" + +SITE_NAME :: "PaulW.XYZ" + +COMMON_STYLESHEETS :: []string { + "/assets/global.css", + "https://cdn.jsdelivr.net/npm/prismjs@1.30.0/themes/prism-tomorrow.min.css", +} +COMMON_SCRIPTS :: []string { + "https://cdn.jsdelivr.net/npm/prismjs@1.30.0/components/prism-core.min.js", + "https://cdn.jsdelivr.net/npm/prismjs@1.30.0/plugins/autoloader/prism-autoloader.min.js", +} + +OUTPUT_ROOT_NAME :: "build" + +markdown_paths :: []string{"notes", "posts"} + +main :: proc() { + create_output_directories(markdown_paths) + copy_public_assets() + + home_page := generate_sitemap() + dump_page(home_page) + + sb := strings.builder_make() + + process_markdown(&sb, home_page) + generate_home(&sb, home_page) +} + +Page :: struct { + title: string, + pages: map[string]Page, +} + +add_page :: proc(parent: ^Page, key: string, value: Page) { + parent.pages[key] = value +} + +dump_page :: proc(page: Page, indent_level := 0) { + for i in 0 ..< indent_level { + fmt.print("\t") + } + fmt.println(page.title) + for name, page in page.pages { + for i in 0 ..= indent_level { + fmt.print("\t") + } + fmt.println("/", name) + dump_page(page, indent_level + 1) + } +} + +generate_sitemap :: proc() -> Page { + home_page: Page = { + title = SITE_NAME, + pages = make(map[string]Page), + } + + process_markdown_parent(&home_page, "notes", "Notes") + process_markdown_parent(&home_page, "posts", "Posts") + + return home_page +} + +process_markdown_parent :: proc(parent: ^Page, dir: string, title: string) { + page := Page { + title = title, + pages = make(map[string]Page), + } + + files, os_err := os.read_directory_by_path(dir, 0, context.temp_allocator) + if os_err != nil { + fmt.eprintfln("failed to read files from directory '%s' (%s)", dir, os_err) + return + } + for file_info in files { + if len(file_info.name) < 1 || file_info.name[0] == '.' do continue + + file, os_err := os.open(file_info.fullpath, {.Read}) + if os_err != nil { + panic("something funny happened lol; TODO of course!!!") + } + defer os.close(file) + + reader: bufio.Reader + bufio.reader_init(&reader, os.to_reader(file)) + defer bufio.reader_destroy(&reader) + + line := bufio.reader_read_string(&reader, '\n', context.temp_allocator) or_continue + trimmed := strings.trim(line, "\n\r \t") + + if len(trimmed) < 5 || trimmed[0] != '#' || trimmed[1] != ' ' do continue + + title := strings.substring_from(trimmed, 2) or_continue + + ext := os.ext(file_info.name) + if ext != ".md" do continue + output_name := strings.trim_suffix(file_info.name, ext) + + md_page := Page { + title = strings.clone(title), + } + add_page(&page, output_name, md_page) + + } + add_page(parent, dir, page) +} + +copy_public_assets :: proc() { + err := os.copy_directory_all(OUTPUT_ROOT_NAME, "public") + if err != nil { + fmt.eprintln("error copying public assets", err) + } +} + +create_output_directories :: proc(dir_names: []string) { + os_err := os.make_directory(OUTPUT_ROOT_NAME) + if os_err != nil && os_err != .Exist { + fmt.eprintfln("cannot create output root directory '%s': %s", OUTPUT_ROOT_NAME, os_err) + return + } + + for dir_name in dir_names { + dir_path, alloc_err := os.join_path({OUTPUT_ROOT_NAME, dir_name}, context.temp_allocator) + if alloc_err != nil { + fmt.eprintln("allocator error:", alloc_err) + continue + } + + os_err = os.make_directory(dir_path) + if os_err != nil && os_err != .Exist { + fmt.eprintln("failed to create directory:", dir_path) + continue + } + } +} + +remove_title :: proc(root: ^md.Node) { + heading_state: enum { + None, + Entered, + //Copied, + Exited, + } = .None + //title: string + iter := md.iter_new(root) + defer md.iter_free(iter) + for md.iter_next(iter) != .Done { + event_type := md.iter_get_event_type(iter) + node := md.iter_get_node(iter) + + #partial switch node.type { + case .Heading: + level := md.node_get_heading_level(node) + if level == 1 && heading_state != .Exited { + if event_type == .Enter { + heading_state = .Entered + } else if event_type == .Exit { + heading_state = .Exited + md.node_unlink(node) + md.node_free(node) + } + } + // case .Text: + // if heading_state == .Entered { + // heading_state = .Copied + // title = strings.clone_from_cstring(md.node_get_literal(node)) + // } + } + } + //return title +} + +// must free +parse_json :: proc(file_path: string) -> json.Value { + json_file_content, os_err := os.read_entire_file_from_path(file_path, context.temp_allocator) + if os_err != nil { + fmt.eprintfln("failed to read files from directory '%s' (%s)", file_path, os_err) + return nil + } + json_value, json_err := json.parse( + json_file_content, + json.DEFAULT_SPECIFICATION, + true, + context.allocator, + ) + if json_err != .None { + fmt.eprintfln("error parsing json file '%s' (%s)", file_path, json_err) + return nil + } + return json_value +} + +generate_home :: proc(sb: ^strings.Builder, site: Page) { + strings.builder_reset(sb) + EXTERNAL_JSON_FILE :: "external.json" + + external_json := parse_json(EXTERNAL_JSON_FILE) + defer json.destroy_value(external_json) + + output_file_path, alloc_err := os.join_path( + {OUTPUT_ROOT_NAME, "index.html"}, + context.temp_allocator, + ) + if alloc_err != nil { + fmt.eprintln("allocator error:", alloc_err) + return + } + + output_file, os_err2 := os.open(output_file_path, {.Write, .Create, .Trunc}) + if os_err2 != nil { + fmt.eprintfln("failed to open output file '%s' (%s)", output_file_path, os_err2) + return + } + defer os.close(output_file) + + { + html_begin(sb) + defer html_end(sb, {}) + + heading_title(sb, SITE_NAME) + + container_begin(sb) + defer container_end(sb) + + { + block_begin(sb) + defer block_end(sb) + + obj := external_json.(json.Object) + for text, href in obj { + fmt.sbprintf( + sb, + "%s", + href.(json.String), + text, + ) + } + } + + { + block_begin(sb) + defer block_end(sb) + + fmt.sbprintf(sb, "

%s

", "Navigation") + + for name, page in site.pages { + fmt.sbprintf(sb, "%s", name, page.title) + } + } + } + + os.write_string(output_file, strings.to_string(sb^)) +} + +set_pages_to_process :: proc(page: Page, pages: ^map[string]^Page, parent_path := "") { + for name, &page in page.pages { + current_path := strings.trim(fmt.tprintf("%s/%s", parent_path, name), "/") + for path in markdown_paths { + if strings.trim(path, "/") == current_path do map_insert(pages, path, &page) + } + set_pages_to_process(page, pages, current_path) + } +} + +process_markdown :: proc(sb: ^strings.Builder, site: Page) { + pages_to_process := make(map[string]^Page) + defer delete(pages_to_process) + set_pages_to_process(site, &pages_to_process) + + for markdown_dir, page in pages_to_process { + markdown_dir_toc := make([dynamic][3]string) // path, title, date + defer delete(markdown_dir_toc) + defer create_toc_page(page.title, markdown_dir, &markdown_dir_toc, site) + + for md_name, md_page in page.pages { + current_path := fmt.tprintf("/%s/%s", markdown_dir, md_name) + + input_file_name := fmt.tprint(md_name, ".md", sep = "") + input_file_path, alloc_err := os.join_path( + {markdown_dir, input_file_name}, + context.temp_allocator, + ) + + git_state, git_out, git_err, os_err := os.process_exec( + os.Process_Desc { + command = { + "git", + "log", + "-1", + "--date=format-local:%Y-%m-%dT%H:%M:%SZ", + "--format=%ad", + "--", + input_file_path, + }, + env = {"TZ=UTC"}, + }, + context.temp_allocator, + ) + if os_err != nil { + fmt.eprintln("failed to start git process", os_err, git_err) + return + } + date := strings.trim(string(git_out), " \t\n\r") + + // @leak + append(&markdown_dir_toc, [3]string{strings.clone(current_path), md_page.title, date}) + + file, os_err1 := os.read_entire_file(input_file_path, context.temp_allocator) + + strings.builder_reset(sb) + cmark_root := md.parse_document( + cast([^]u8)raw_data(file), + len(file), + {.Validate_UTF8, .Unsafe}, + ) + remove_title(cmark_root) + html := md.render_html(cmark_root, {.Unsafe}) + + output_file_name := fmt.tprint(md_name, ".html", sep = "") + output_file_path, alloc_err2 := os.join_path( + {OUTPUT_ROOT_NAME, markdown_dir, output_file_name}, + context.temp_allocator, + ) + + out_file, os_err2 := os.open(output_file_path, {.Write, .Create, .Trunc}) + if os_err2 != nil { + fmt.eprintfln("failed to open output file '%s' (%s)", output_file_path, os_err2) + continue + } + defer os.close(out_file) + + { + html_begin(sb, md_page.title) + defer html_end(sb, site, current_path) + + heading_title(sb, md_page.title) + + + container_begin(sb) + defer container_end(sb) + + last_updated_date(sb, date) + + block_begin(sb) + defer block_end(sb) + + fmt.sbprint(sb, html) + } + + write_len: int + write_len, os_err = os.write_strings(out_file, strings.to_string(sb^)) + if os_err != nil { + fmt.eprintfln("failed to write to output file '%s' (%s)", output_file_path, os_err) + continue + } + } + } +} + +create_toc_page :: proc(title, toc_path: string, toc_info: ^[dynamic][3]string, site: Page) { + _sb: strings.Builder = strings.builder_make() + sb := &_sb + defer strings.builder_destroy(sb) + toc_file_path, alloc_err := os.join_path( + {OUTPUT_ROOT_NAME, toc_path, "index.html"}, + context.temp_allocator, + ) + if alloc_err != nil { + fmt.eprintln("allocator error:", alloc_err) + return + } + + sort_toc :: proc(a: [3]string, b: [3]string) -> int { + return -strings.compare(a[2], b[2]) + } + + sort.quick_sort_proc(toc_info[:], sort_toc) + + fmt.println(toc_file_path) + + { + html_begin(sb, title) + defer html_end(sb, site, toc_path) + + heading_title(sb, title) + + container_begin(sb) + defer container_end(sb) + + block_begin(sb) + defer block_end(sb) + + if len(toc_info) > 0 { + table_begin(sb) + defer table_end(sb) + + for item in toc_info { + tr_begin(sb) + fmt.sbprintf( + sb, + "%saarfsdf", + item[0], + item[1], + item[2], + ) + tr_end(sb) + } + + fmt.sbprint(sb, + ` + ` + ) + } else { + fmt.sbprint( + sb, + "
", + "

**crickets**

", + "

Nothing to list...

", + "Go Home", + "
", + ) + } + } + + + out_file, os_err2 := os.open(toc_file_path, {.Write, .Create, .Trunc}) + if os_err2 != nil { + fmt.eprintfln("failed to open output file '%s' (%s)", toc_file_path, os_err2) + return + } + defer os.close(out_file) + write_len, os_err := os.write_strings(out_file, strings.to_string(_sb)) + if os_err != nil { + fmt.eprintfln("failed to write to output file '%s' (%s)", toc_file_path, os_err) + return + } +} + +last_updated_date :: proc(sb: ^strings.Builder, date: string) { + fmt.sbprint(sb, "") + fmt.sbprint( + sb, + "", + sep = "", + ) + + +} + +nav :: proc(sb: ^strings.Builder, current_path: string, site: Page) { + fmt.sbprint(sb, "") +} + +has_called_html_begin := 0 +html_begin :: proc(sb: ^strings.Builder, title: string = "") { + assert(has_called_html_begin >= 0) + has_called_html_begin += 1 + fmt.sbprint(sb, "") + fmt.sbprint(sb, "") + fmt.sbprint(sb, "") + fmt.sbprint(sb, "") + if title == "" do fmt.sbprintf(sb, "%s", SITE_NAME) + else do fmt.sbprintf(sb, "%s | %s", title, SITE_NAME) + for s in COMMON_STYLESHEETS { + fmt.sbprintf(sb, "", s) + } + for s in COMMON_SCRIPTS { + fmt.sbprintf(sb, "", s) + } + fmt.sbprint(sb, "") + fmt.sbprint(sb, "") +} + +html_end :: proc(sb: ^strings.Builder, site: Page, current_path := "/") { + assert(has_called_html_begin > 0) + has_called_html_begin -= 1 + nav(sb, current_path, site) + fmt.sbprint(sb, "") + fmt.sbprint(sb, "") +} + +has_called_container_begin := 0 +container_begin :: proc(sb: ^strings.Builder, element := "main") { + assert(has_called_container_begin >= 0) + has_called_container_begin += 1 + fmt.sbprintf(sb, "<%s class='container'>", element) +} + +container_end :: proc(sb: ^strings.Builder, element := "main") { + assert(has_called_container_begin > 0) + has_called_container_begin -= 1 + fmt.sbprintf(sb, "", element) +} + +has_called_block_begin := 0 +block_begin :: proc(sb: ^strings.Builder, element := "section") { + assert(has_called_block_begin >= 0) + has_called_block_begin += 1 + fmt.sbprintf(sb, "<%s class='block'>", element) +} + +block_end :: proc(sb: ^strings.Builder, element := "section") { + assert(has_called_block_begin > 0) + has_called_block_begin -= 1 + fmt.sbprintf(sb, "", element) +} + +heading_title :: proc(sb: ^strings.Builder, title: string) { + fmt.sbprintf(sb, "

%s

", title) +} + +has_called_table_begin := 0 +table_begin :: proc(sb: ^strings.Builder) { + assert(has_called_table_begin >= 0) + has_called_table_begin += 1 + fmt.sbprint(sb, "") +} + +table_end :: proc(sb: ^strings.Builder) { + assert(has_called_table_begin > 0) + has_called_table_begin -= 1 + fmt.sbprintf(sb, "
") +} + + +has_called_tr_begin := 0 +tr_begin :: proc(sb: ^strings.Builder) { + assert(has_called_tr_begin >= 0) + has_called_tr_begin += 1 + fmt.sbprint(sb, "") +} + +tr_end :: proc(sb: ^strings.Builder) { + assert(has_called_tr_begin > 0) + has_called_tr_begin -= 1 + fmt.sbprintf(sb, "") +} diff --git a/next-env.d.ts b/next-env.d.ts deleted file mode 100644 index 1b3be08..0000000 --- a/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/next.config.ts b/next.config.ts deleted file mode 100644 index 1f9905d..0000000 --- a/next.config.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type {NextConfig } from 'next'; -import NextBundleAnalyzer from '@next/bundle-analyzer'; - -let config: NextConfig = { - reactStrictMode: true, - turbopack: { - rules: { - '*.txt': { - as: '*.js', - loaders: ['raw-loader'], - }, - '*.md': { - as: '*.js', - loaders: ['raw-loader'], - } - }, - resolveExtensions: ['.txt', '.md', '.tsx', '.ts', '.js'] - }, - webpack: (config, _options) => { - config.module.rules.push( - { - test: /\.svg$/, - use: [{ loader: '@svgr/webpack' }], - }, - { - test: /\.md$/, - type: 'asset/source', - }, - { - test: /\.otf$/, - type: 'asset/resource', - }, - { - test: /\.txt$/, - type: 'asset/source', - }, - ); - - return config; - }, -}; - -if (process.env.ANALYZE) { - config = NextBundleAnalyzer({ - enabled: true - })(config); -} - -export default config; diff --git a/notes/references.md b/notes/references.md index ca1714e..0c42c4f 100644 --- a/notes/references.md +++ b/notes/references.md @@ -1,5 +1,7 @@ # References -## [Intel® 64 and IA-32 Architectures Software Developer’s Manual](https://software.intel.com/en-us/download/intel-64-and-ia-32-architectures-sdm-combined-volumes-1-2a-2b-2c-2d-3a-3b-3c-3d-and-4) +## Intel® 64 and IA-32 Architectures Software Developer’s Manual + - -## [CUDA C++ Programming Guide](https://docs.nvidia.com/cuda/pdf/CUDA_C_Programming_Guide.pdf) \ No newline at end of file +## CUDA C++ Programming Guide + - diff --git a/notes/resources.md b/notes/resources.md index 4be7d97..29c3496 100644 --- a/notes/resources.md +++ b/notes/resources.md @@ -6,76 +6,76 @@ refer to someone or within something. ### Memory Allocation Strategies -- https://www.gingerbill.org/series/memory-allocation-strategies/ +- ### Immediate-Mode Graphical User Interfaces (2005) -- https://caseymuratori.com/blog_0001 +- -- https://www.youtube.com/watch?v=Z1qyvQsjK5Y +- ### What Color is Your Function? -- https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/ +- ### Real-time audio programming 101: time waits for nothing -- http://www.rossbencina.com/code/real-time-audio-programming-101-time-waits-for-nothing +- ### Triangulation -- https://www.humus.name/index.php?ID=228 +- ### Quantifying the Performance of Garbage Collection vs. Explicit Memory Management -- https://people.cs.umass.edu/~emery/pubs/gcvsmalloc.pdf +- ### Typing is Hard -- https://3fx.ch/typing-is-hard.html +- ### The Aggregate Magic Algorithms -- http://aggregate.org/MAGIC/ +- ### Ryan Fleury's UI Series Semi-paywalled -- https://www.rfleury.com/p/ui-series-table-of-contents +- ### You Could Have Invented Monads! (And Maybe You Already Have.) -- http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html +- ### Fix Your Timestep! -- https://gafferongames.com/post/fix_your_timestep/ +- ### UTF-8 Everywhere -- http://utf8everywhere.org +- ### Parsing Gigabytes of JSON per Second -- https://arxiv.org/abs/1902.08318 [[PDF](https://arxiv.org/pdf/1902.08318)] +- [[PDF](https://arxiv.org/pdf/1902.08318)] ### What are OKLCH colors? -- https://jakub.kr/components/oklch-colors +- ### Software Foundations series -- https://softwarefoundations.cis.upenn.edu/ +- ### Software Rendering Alpha-Blending Tricks -- https://gist.github.com/mattiasgustavsson/c11e824e3d603d0c86e5e0dde4ecf839 +- ### A Relational Model of Data for Large Shared Data Banks -- https://fermatslibrary.com/s/a-relational-model-of-data-for-large-shared-data-banks +- ### Powersort -- https://www.wild-inter.net/publications/munro-wild-2018.pdf \ No newline at end of file +- diff --git a/notes/retro-gaming.md b/notes/retro-gaming.md index 833a215..751337e 100644 --- a/notes/retro-gaming.md +++ b/notes/retro-gaming.md @@ -5,29 +5,27 @@ The use of the term retro is debatable here as the term is used quite inconsiste ## Recompilations ### Zelda64Recomp -- https://github.com/Zelda64Recomp/Zelda64Recomp +- ## Open-source Recreations ### OpenMW -- https://github.com/OpenMW/openmw +- ### OpenTTD -- https://github.com/OpenTTD/OpenTTD +- ### NFSIISE -- https://github.com/zaps166/NFSIISE +- ### RE3 -- https://github.com/github/dmca/blob/master/2021/02/2021-02-19-take-two.md +- - :( ## WidescreenFixesPack -- https://thirteenag.github.io/wfp -- https://github.com/ThirteenAG/WidescreenFixesPack +- +- ## Linux Arm Handhelds -- https://portmaster.games/ +- - native ports of the reimplementations of many old-skool games - - diff --git a/package.json b/package.json deleted file mode 100644 index 3673ec8..0000000 --- a/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "private": true, - "scripts": { - "prebuild": "node ./scripts/generate-metadata.js", - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint" - }, - "dependencies": { - "dotenv": "^16.3.1", - "highlight.js": "^11.10.0", - "next": "^15.3.1", - "normalize.css": "^8.0.1", - "raw-loader": "^4.0.2", - "react": "^19.0.0", - "react-dom": "^19.0.0", - "react-markdown": "^9.0.1", - "rehype-autolink-headings": "^7.1.0", - "rehype-highlight": "^7.0.0", - "rehype-highlight-code-lines": "^1.0.4", - "rehype-katex": "^7.0.1", - "rehype-raw": "^7.0.0", - "rehype-slug": "^6.0.0", - "remark-gfm": "^4.0.0", - "remark-loader": "^6.0.0", - "remark-math": "^6.0.0", - "uri-js": "^4.4.1" - }, - "devDependencies": { - "@next/bundle-analyzer": "^15.0.4", - "@svgr/webpack": "^8.1.0", - "@types/node": "^22.7.4", - "@types/react": "^19.0.1", - "@types/react-dom": "^19.0.1", - "@types/react-syntax-highlighter": "^15.5.7", - "eslint": "^9.11.1", - "eslint-config-next": "^15.0.4", - "typescript": "^5.6.2" - } -} diff --git a/src/app/global.css b/public/assets/global.css similarity index 90% rename from src/app/global.css rename to public/assets/global.css index e052f11..2ca7770 100644 --- a/src/app/global.css +++ b/public/assets/global.css @@ -9,7 +9,7 @@ --secondary-blue: #05455f; --tertiary-blue: #05232f; --table-odd-color: rgba(255, 255, 255, 0.05); - --table-even-color: rgba(255, 255, 255, 0.025); + --table-even-color: rgba(255, 255, 255, 0.025); } @font-face { @@ -412,3 +412,42 @@ ul li { background-color: #222222; padding: 1rem; } + +heading.container { + text-align: center; + margin: auto; + background-color: var(--main-background-color); +} + +heading .title { + border-bottom: 1px solid #FFFFFF; + max-width: 95%; + margin: auto; +} + +.last-updated { + text-align: right; + display: block; + font-style: italic; + font-size: 1rem; + margin: 0.5rem 0.75rem; +} + +nav { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4); + position: fixed; + bottom: 0; + z-index: 1000; + margin: 0; + height: 2.5rem; + max-height: 2.5rem; + min-height: 2.5rem; + min-width: 100%; + width: 100%; + background: linear-gradient(to bottom right, #1a3a15, #09351b) no-repeat center center fixed; + overflow-y: hidden; + overflow-x: auto; + white-space: nowrap; +} diff --git a/public/home.json b/public/home.json deleted file mode 100644 index fb91a0f..0000000 --- a/public/home.json +++ /dev/null @@ -1,14 +0,0 @@ - { - "posts": { - "title": "Posts" - }, - "notes": { - "title": "Notes" - }, - "about": { - "title": "About" - }, - "sitemap": { - "title": "Site Map" - } - } diff --git a/scripts/generate-metadata.js b/scripts/generate-metadata.js deleted file mode 100644 index e99f830..0000000 --- a/scripts/generate-metadata.js +++ /dev/null @@ -1,131 +0,0 @@ -const path = require('path') -const fs = require('fs/promises') - -const gitRef = process.env.WWW_GIT_REF ?? 'master' -const giteaApiRepo = `https://git.paulw.xyz/api/v1/repos/xyz/www/` - -async function readFirstLines(filePath, lineCount = 1) { - const gitFileFetch = await fetch(`${giteaApiRepo}raw/${filePath}?ref=${gitRef}`) - if (!gitFileFetch.ok) return null - const file = await gitFileFetch.text() - const lines = file.split('\n') - const out = [] - for (let i = 0; i < lineCount && i < lines.length; i++) { - out.push(lines[i]) - } - return out -} - -async function getTitle(filePath) { - const firstLines = await readFirstLines(filePath) - if (firstLines === null || firstLines === undefined || firstLines.length === 0) return null - let title = firstLines[0] - - if (title.substring(0, 2) !== '# ') return null - title = title - .substring(1, firstLines[0].length) - .trim() - if (title.length < 3) - return null - return title -} - -async function getMarkdownMetadata(dir) { - const dirGitInfoFetch = await fetch(`${giteaApiRepo}contents/${dir}/?ref=${gitRef}`) - if (!dirGitInfoFetch.ok) return {} - - const commits = {} - const out = {} - - const dirGitInfo = await dirGitInfoFetch.json() - for (const file of dirGitInfo) { - if (file.name.startsWith('.') || !file.name.endsWith('.md')) continue - const title = await getTitle(file.path) - if (title === null) continue - - const slug = file.name.replace(/\.md$/, '') - let mtime = new Date(); // better to have an incorrect recent date than the more incorrect unix time 0 (assuming the host doesn't have messed up clock) - - - if (!(file.last_commit_sha in commits)) { - const lastCommitSha = await fetch(`${giteaApiRepo}/git/commits/${file.last_commit_sha}`) - if (lastCommitSha.ok) { - const commitJson = await lastCommitSha.json() - commits[commitJson.sha] = (new Date(commitJson.created)) - } - } - - mtime = commits[file.last_commit_sha] - - out[slug] = { - title: title, - mtime: mtime.toISOString(), - } - } - return out -} - -async function readFilesMetadata(dir) { - const filePath = jsonFilePath(dir) - try { - const fileContent = await fs.readFile(filePath, 'utf-8') - const metadata = JSON.parse(fileContent) - return metadata - } catch { - return [] - } -} - -async function writeFilesMetadata(filePath, metadata) { - try { - await fs.writeFile(filePath, JSON.stringify(metadata, null, 4), 'utf-8') - } catch (error) { - console.error(error) - } -} - -function jsonFilePath(dir) { - return path.join(process.cwd(), 'public', `${dir}.json`); // ehh -} - -async function generateNotesMetadata() { - const dir = 'notes' - await writeFilesMetadata(jsonFilePath(dir), await getMarkdownMetadata(dir)) -} - -async function generatePostsMetadata() { - const dir = 'posts' - const currMetadata = await readFilesMetadata(dir) - const generatedMetadata = await getMarkdownMetadata(dir) - const newMetadata = {} - - for (const [name, data] of Object.entries(generatedMetadata)) { - let otime = new Date() - if (currMetadata[name]?.otime !== undefined && currMetadata[name]?.otime !== null) - otime = currMetadata[name].otime ?? otime - else - otime = data.mtime ?? otime - - newMetadata[name] = { ...data, otime } - } - await writeFilesMetadata(jsonFilePath(dir), newMetadata) -} - -async function generateSiteMap() { - await generateNotesMetadata() - await generatePostsMetadata() - - const sitemap = { - title: 'PaulW.XYZ', - pages: await readFilesMetadata('home') - } - - const pages = ['posts', 'notes'] - for (const page of pages) { - sitemap.pages[page].pages = await readFilesMetadata(page) - } - - await writeFilesMetadata(jsonFilePath('sitemap'), sitemap) -} - -generateSiteMap() diff --git a/shims.d.ts b/shims.d.ts deleted file mode 100644 index 5feba8e..0000000 --- a/shims.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -declare module '*.md' { - const rawmd: string; - export default rawmd; -} - -declare module '*.txt' { - const content: string; - export default content; -} diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx deleted file mode 100644 index 68b1338..0000000 --- a/src/app/about/page.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import ReactMarkdown from 'react-markdown'; - -import ReadmeMd from '../../../README.md'; -import License from '../../../LICENSE.txt'; - -function AboutPage() { - return ( - <> -
-

Paul's Personal Website.

-

You can find me on the following platforms:

- -

- The original motivation was to just play with Next.js as it pretty much did the things I wanted web pages to do. But it came at the cost of needless complexity. As I use the JavaScript/ECMAScript/Whatever-you-want-to-call-it-script more and more, I am convinced that it is not a platform worth pursuing because the more complex it gets, the less control I have over what it does and this platform and its users seems to be okay with that sort of loss. I have been instead pivoting toward things that impressed and got me interested in working with computers.

-

Most services/products are keen on going against the file over app philosophy which entails prioritizing data over software and anticipate and embrace the eventual death of software. People instead want subscription services that barely support open formats and sometimes do not support exporting data to commonly used formats. The goal here is to avoid storing artifacts under locations that are easily not accessible, not under my control, and does not lock me out of using it with other software. The only reason I have not completely abandoned this is thanks to my decision to rely on Markdown files alone. Had it been reliant on any cloud software, I would have started over.

- -

Got any questions, concerns, or issues? Contact me via email: contact [at] paulw [dot] xyz.

-
-
-
-

Source for this site is available on GitHub: paulwxyz/www and git.paulw.xyz/xyz/www

-

Relevant information regarding the source is available on the repo and is also provided below.

-
-
-

README

- - {ReadmeMd.replace(/^#{6}\s+(.*)\s+$/gm, (s: string, a) => `**${a}**\n`).replace(/^#{1,5} /gm, (s: string) => { return `##${s}` })} - -
-
-

LICENSE

-
{License}
-
- - ); -} - -export default AboutPage; diff --git a/src/app/components/container.tsx b/src/app/components/container.tsx deleted file mode 100644 index bb8869c..0000000 --- a/src/app/components/container.tsx +++ /dev/null @@ -1,9 +0,0 @@ -export default function Container(props: { children?: React.ReactNode, ignore?: boolean }) { - if (props.ignore) - return <>{props.children}; - return ( -
- {props.children} -
- ); -} diff --git a/src/app/components/note-entry.tsx b/src/app/components/note-entry.tsx deleted file mode 100644 index 64dd56d..0000000 --- a/src/app/components/note-entry.tsx +++ /dev/null @@ -1,17 +0,0 @@ -'use client' -import Link from 'next/link'; -import { toRelativeDate } from '../lib/date'; -export function NoteEntry({ note }: { note: { title: string, mtime: string, slug: string } }) { - return ( - - - - {note.title} - - - - {note.mtime && toRelativeDate(note.mtime)} - - - ); -} \ No newline at end of file diff --git a/src/app/components/quick-links.tsx b/src/app/components/quick-links.tsx deleted file mode 100644 index bf49a0c..0000000 --- a/src/app/components/quick-links.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import Link from 'next/link'; -import Pages from '../../../public/external.json'; - -function QuickLinks() { - return ( -
- { - Object.entries(Pages).map(([title, link]) => { - const extern = link.match(/^http/) && `blue extern` || ''; - return ( - - {title} - - ); - }) - } -
- ); -} - -export default QuickLinks; diff --git a/src/app/components/recent-notes.tsx b/src/app/components/recent-notes.tsx deleted file mode 100644 index e5ed52e..0000000 --- a/src/app/components/recent-notes.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import Link from "next/link"; -import NotesInfo from '../../../public/notes.json'; - -function RecentNotes() { - const notes = Object.entries(NotesInfo) - .map(([slug, note]) => { - return { - slug, - title: note.title, - mtime: new Date(note.mtime) - } - }) - .sort( - (a, b) => { - return b.mtime.getTime() - a.mtime.getTime(); - } - ); - return ( -
-

Recent Notes

-
    - {notes?.slice(0, 5) - .map(({slug, title, mtime}) => { - return ( -
  • - {title} -
  • - ); - }) - } - { - notes.length > 5 && - More... - } -
-
- ); -} - -export default RecentNotes; diff --git a/src/app/components/recent-posts.module.css b/src/app/components/recent-posts.module.css deleted file mode 100644 index 78dbe4b..0000000 --- a/src/app/components/recent-posts.module.css +++ /dev/null @@ -1,52 +0,0 @@ -.container { - border-bottom-left-radius: 0.5rem; - border-bottom: 1px dashed var(--main-border-color); - border-left: 1px dashed var(--main-border-color); - padding-top: 1.25rem; - margin-left: 0.5rem; -} - -.block { - margin: 0; - position: relative; - display: flex; - align-items: center; -} - -.block+.block { - border-top: 1px dashed var(--main-border-color); -} - -.block:first-of-type { - border-top-right-radius: 0.5rem; -} - -.block:nth-of-type(2n) { - background-color: var(--table-even-color); -} - -.block:nth-of-type(2n+1) { - background-color: var(--table-odd-color); -} - -.postTitle { - flex: 1 1 60%; - padding: .25rem 0.75rem; -} - -.postDate { - flex: 1 1; - display: inline-block; - text-align: right; - font-style: italic; - font-size: 1rem; - padding: .25rem 0.50rem; -} - -.more { - text-align: right; -} - -.more a { - text-decoration: none; -} diff --git a/src/app/components/recent-posts.tsx b/src/app/components/recent-posts.tsx deleted file mode 100644 index dadbd09..0000000 --- a/src/app/components/recent-posts.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import Link from "next/link"; -import { toRelativeDate } from "../lib/date"; -import style from './recent-posts.module.css'; -import PostsInfo from '../../../public/posts.json'; - -function PostBlock({ slug, otime, title }: { slug: string, otime: string, title: string }) { - return ( -
- - {toRelativeDate(new Date(otime))} - -
- - {title} - -
-
- ); -} - -function RecentPosts() { - const posts = Object.entries(PostsInfo).reverse(); - if (!posts.length) - return <>; - return ( -
-

Recent Posts

-
- {posts?.slice(0, 10) - .map(([slug, post]: any, i: number) => { - return ( - - ); - })} -
- { - posts.length > 10 && -
- More... -
- } -
- ); -} - -export default RecentPosts; diff --git a/src/app/components/title.module.css b/src/app/components/title.module.css deleted file mode 100644 index 300b3e1..0000000 --- a/src/app/components/title.module.css +++ /dev/null @@ -1,30 +0,0 @@ -.container { - text-align: center; - margin: auto; - background-color: var(--main-background-color); -} - -.container .title { - border-bottom: 1px solid #FFFFFF; - max-width: 95%; - margin: auto; -} - -.nav { - padding: 0.25rem 0.75rem; - font-size: 1.25rem; - box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4); - position: fixed; - bottom: 0; - z-index: 1000; - margin: 0; - height: 2.5rem; - max-height: 2.5rem; - min-height: 2.5rem; - min-width: 100%; - width: 100%; - background: linear-gradient(to bottom right, #1a3a15, #09351b) no-repeat center center fixed; - overflow-y: hidden; - overflow-x: auto; - white-space: nowrap; -} diff --git a/src/app/components/title.tsx b/src/app/components/title.tsx deleted file mode 100644 index 23d6a2c..0000000 --- a/src/app/components/title.tsx +++ /dev/null @@ -1,68 +0,0 @@ -'use client' -import Link from 'next/link'; -import { usePathname } from 'next/navigation'; -import { Fragment } from 'react'; - -import style from './title.module.css'; -import SiteMap from '../../../public/sitemap.json'; -import { Sites } from '../lib/site'; - -function createPathElements(ancestors: Array<{ name: string, path: string }>) { - let currentPath = ''; - return ancestors.map((ancestor, id) => { - currentPath += `/${ancestor.path}` - return ( - - {ancestor.name} - <> / - - ); - }); -} - -export default function Title() { - const pagePath = usePathname(); - const splitPath: Array<{ name: string, path: string }> = []; - - // TODO(Paul): clean this up - let currRoot: Sites = SiteMap.pages; - let title: string | null = null; - if (pagePath && pagePath !== '/') { - const subPaths = pagePath.split('?')[0].split('#')[0].split('/'); - for (const p of subPaths.slice(1, subPaths.length)) { - if (!p || !currRoot[p]) - continue; - splitPath.push({ name: currRoot[p].title, path: p }); - - if (currRoot === undefined - || currRoot[p] === undefined - || currRoot[p].pages === undefined) - break; - currRoot = currRoot[p].pages!; - } - if (splitPath !== undefined && splitPath.length > 0) - title = splitPath.pop()!.name; - - } - - const pathElements = splitPath && createPathElements(splitPath) || <>; - return ( - <> - {/* - {title && `${title} | PaulW.XYZ` || 'PaulW.XYZ'} - */} -
-

- {title || 'PaulW.XYZ'} -

-
-
- { - title - ? <>PaulW.XYZ / {pathElements}{title} - : <>PaulW.XYZ / - } -
- - ); -} diff --git a/src/app/layout.tsx b/src/app/layout.tsx deleted file mode 100644 index b2e1b5e..0000000 --- a/src/app/layout.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import type {Metadata} from 'next' -import 'normalize.css' -import './global.css' -import Container from './components/container' -import Title from './components/title' - -export default function RootLayout({children,}: Readonly<{children: React.ReactNode}>) { - return ( - - - - <Container> - {children} - </Container> - </body> - </html> - ) -} \ No newline at end of file diff --git a/src/app/lib/date.ts b/src/app/lib/date.ts deleted file mode 100644 index 3400c1d..0000000 --- a/src/app/lib/date.ts +++ /dev/null @@ -1,132 +0,0 @@ -// getMonth() method ranges from 0-11 so no reason to account for it -const months = [ - 'January', - 'February', - 'March', - 'April', - 'May', - 'June', - 'July', - 'August', - 'September', - 'October', - 'November', - 'December' -]; - -function get12HourTime(pdate: Date | string): string { - const date = (typeof pdate === 'string') ? new Date(pdate) : pdate; - let hours = date.getHours(); - const minutes = date.getMinutes(); - let meridiem = 'A.M.'; - - let strhours = '' - - if (hours > 12) { - hours -= 12; - meridiem = 'P.M.'; - } - - if (hours === 0) - hours = 12; - - return `${hours}:${minutes < 10 ? '0' : ''}${minutes} ${meridiem}`; - -} - -function toHumanReadableDate(date: Date | string, disable?: { year?: boolean, month?: boolean, day?: boolean }) { - const oDate = (typeof date === 'string') ? new Date(date) : date; - - const year = oDate.getFullYear(); - const month = months[oDate.getMonth()]; - const day = oDate.getDate(); - const suffix = getOrdinalDaySuffix(day) - let out = ''; - out = !disable?.month ? `${month}` : ''; - out = !disable?.day ? `${out} ${day}${suffix}` : out; - out = !disable?.year ? `${out}, ${year}` : out; - - return out; -} - - -export function getOrdinalDaySuffix(day: number): string { - switch (day) { - case 1: - case 21: - case 31: - return 'st'; - case 2: - case 22: - return 'nd'; - case 3: - case 23: - return 'rd'; - default: - return 'th'; - } -} - -export function toLocaleString(pdate: Date | string): string { - const date = (typeof pdate === 'string') ? new Date(pdate) : pdate; - return `${toHumanReadableDate(date)} at ${get12HourTime(date)}`; -} - -export function toRelativeDate(date: Date | string): string { - const oDate = (typeof date === 'string') ? new Date(date) : date; - - - if (!isValid(oDate)) { - return 'Invalid Date'; - } - - const now = new Date(); - const diff = now.getTime() - oDate.getTime(); - - let tdiff = Math.floor(diff / 1000); - - if (tdiff < 0) { - return toHumanReadableDate(oDate); - } - - if (tdiff < 60) { - return `${tdiff} seconds ago`; - } - - tdiff = Math.floor(tdiff / 60); - if (tdiff < 60) { - return `${tdiff} minute${tdiff === 1 ? '' : 's'} ago`; - } - - tdiff = Math.floor(tdiff / 60); - if (tdiff < 24) { - return `${tdiff} hour${tdiff === 1 ? '' : 's'} ago`; - } - if (tdiff < 48) { - return `Yesterday`; - } - - if (oDate.getFullYear() != now.getFullYear()) - return toHumanReadableDate(oDate); - return toHumanReadableDate(oDate, { year: true }); -} - -export function getFullMonth(month: number) { - if (month >= 1 && month <= 12) - return months[month]; - return 'Invalid Month'; -} - -export function isValid(date: any) { - return (new Date(date)).toString() !== 'Invalid Date'; -} - -const DateTool = { - toRelativeDate, - getFullMonth, - isValid, - getOrdinalDaySuffix, - toLocaleString, -}; - -export default DateTool; diff --git a/src/app/lib/read-markdown.ts b/src/app/lib/read-markdown.ts deleted file mode 100644 index be6443a..0000000 --- a/src/app/lib/read-markdown.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { readFile } from 'fs/promises'; -import path from 'path'; - -export default async function readMarkdown(directory: string, slug: string, withoutTitle: boolean = false): Promise<string> { - const content = await readFile(path.join(process.cwd(), directory, `${slug}.md`), 'utf-8'); - if (withoutTitle) - return content.substring(content.indexOf('\n') + 1, content.length); - return content; -} diff --git a/src/app/lib/site.ts b/src/app/lib/site.ts deleted file mode 100644 index 9dc0c87..0000000 --- a/src/app/lib/site.ts +++ /dev/null @@ -1,11 +0,0 @@ - -export interface Site { - title: string; - pages?: Sites; - mtime?: string; - otime?: string; -} - -export interface Sites { - [slug: string]: Site; -} diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx deleted file mode 100644 index 7e66d40..0000000 --- a/src/app/not-found.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import Link from 'next/link'; - -import style from '../components/title.module.css'; - -function NotFoundPage() { - // TODO: figure out a way to somehow get next to ignore layout in special cases. tried /not-found/page.tsx but it doesn't work :X - return ( - <> -{/* <head> - <title>404: Not Found | PaulW.XYZ - -
-

- Page Not Found -

-
-
PaulW.XYZ / ... ??? / 404: Not Found
-
*/} -
-

Error 404

-

- Uh oh! The page you are looking for does not exist...
-

- Go Home - - More on HTTP status codes - -
- {/*
*/} - - - ); -} - -export default NotFoundPage; diff --git a/src/app/notes/[note]/note.module.css b/src/app/notes/[note]/note.module.css deleted file mode 100644 index 5555c37..0000000 --- a/src/app/notes/[note]/note.module.css +++ /dev/null @@ -1,7 +0,0 @@ -.last-updated { - text-align: right; - display: block; - font-style: italic; - font-size: 1rem; - margin: 0.5rem 0.75rem; -} diff --git a/src/app/notes/[note]/page.tsx b/src/app/notes/[note]/page.tsx deleted file mode 100644 index 7a79e7b..0000000 --- a/src/app/notes/[note]/page.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import ReactMarkdown from 'react-markdown'; -import { PluggableList } from 'unified'; - -import remarkGfm from 'remark-gfm'; -import remarkMath from 'remark-math'; - -import rehypeKatex from 'rehype-katex'; -import rehypeRaw from 'rehype-raw'; -import rehypeSlug from 'rehype-slug'; -import rehypeAutolinkHeadings from 'rehype-autolink-headings'; -import rehypeHighlight from 'rehype-highlight'; -import rehypeHighlightCodeLines, { type HighlightLinesOptions } from 'rehype-highlight-code-lines'; - -import readMarkdown from '../../lib/read-markdown'; -import { toLocaleString } from '../../lib/date'; -import NotesInfo from '../../../../public/notes.json'; - -import style from './note.module.css'; -import 'highlight.js/styles/monokai-sublime.css'; -import 'katex/dist/katex.min.css'; - -interface Note { - title: string, - mtime: string, - content?: string, -} - -interface Notes { - [slug: string]: Note; -} - -function Markdown({ content }: any) { - const remarkPlugins: PluggableList = [ - remarkGfm, - remarkMath, - ]; - const rehypePlugins: PluggableList = [ - rehypeSlug, - rehypeAutolinkHeadings, - rehypeRaw, - rehypeHighlight, - rehypeKatex, - ]; - return - {content} - -} - -export default async function Note({params}: {params: Promise<{note: string}>}) { - const note = (await params).note - const n = await getNotes(note) - return (<> - - Last updated: {toLocaleString(n.mtime)} - -
- -
- - ); -} - -async function getNotes(name: string) { - const notesInfo: Notes = NotesInfo; - return {...notesInfo[name], content: await readMarkdown('notes', name, true)} -} diff --git a/src/app/notes/page.tsx b/src/app/notes/page.tsx deleted file mode 100644 index fbd4ddc..0000000 --- a/src/app/notes/page.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import NotesInfo from '../../../public/notes.json'; -import { NoteEntry } from '../components/note-entry'; - -function NotesPage() { - const notes = Object.entries(NotesInfo) - .map(([slug, note]) => { - return { - slug, - title: note.title, - mtime: new Date(note.mtime) - } - }) - .sort( - (a, b) => { - return b.mtime.getTime() - a.mtime.getTime(); - } - ); - - return ( - <> - { - !notes || notes.length === 0 - && <>No notes found - || - - {notes.map( - (note: any) => { - return (); - } - )} - -
- } - - ) -} - - -export default NotesPage; diff --git a/src/app/page.tsx b/src/app/page.tsx deleted file mode 100644 index f7b01ca..0000000 --- a/src/app/page.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react'; -import Link from 'next/link'; -import QuickLinks from './components/quick-links'; -import RecentNotes from './components/recent-notes'; -import RecentPosts from './components/recent-posts'; -import RootInfo from '../../public/home.json'; - -function Nav() { - const nav = Object.entries(RootInfo); - return ( -
-

Navigation

- { - nav.map(([slug, info]) => { - return {info.title} - }) - } -
- ) -} - -function HomePage() { - return ( - <> - - - -