commit e83de82992daaeda12d9529c89c10ee1ae2a8dc0 Author: Emi Matchu Date: Wed Sep 11 17:15:59 2024 -0700 first commit: basic site and first post! diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..75304f3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.jekyll-cache +/_site diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..aabfeb8 --- /dev/null +++ b/Gemfile @@ -0,0 +1,4 @@ +# frozen_string_literal: true +source "https://rubygems.org" + +gem "jekyll", "~> 4.3" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..a83ce9c --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,167 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + bigdecimal (3.1.8) + colorator (1.1.0) + concurrent-ruby (1.3.4) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + eventmachine (1.2.7) + ffi (1.17.0) + ffi (1.17.0-aarch64-linux-gnu) + ffi (1.17.0-aarch64-linux-musl) + ffi (1.17.0-arm-linux-gnu) + ffi (1.17.0-arm-linux-musl) + ffi (1.17.0-arm64-darwin) + ffi (1.17.0-x86-linux-gnu) + ffi (1.17.0-x86-linux-musl) + ffi (1.17.0-x86_64-darwin) + ffi (1.17.0-x86_64-linux-gnu) + ffi (1.17.0-x86_64-linux-musl) + forwardable-extended (2.6.0) + google-protobuf (4.28.0) + bigdecimal + rake (>= 13) + google-protobuf (4.28.0-aarch64-linux) + bigdecimal + rake (>= 13) + google-protobuf (4.28.0-arm64-darwin) + bigdecimal + rake (>= 13) + google-protobuf (4.28.0-x86-linux) + bigdecimal + rake (>= 13) + google-protobuf (4.28.0-x86_64-darwin) + bigdecimal + rake (>= 13) + google-protobuf (4.28.0-x86_64-linux) + bigdecimal + rake (>= 13) + http_parser.rb (0.8.0) + i18n (1.14.5) + concurrent-ruby (~> 1.0) + jekyll (4.3.3) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) + jekyll-watch (~> 2.0) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) + liquid (~> 4.0) + mercenary (>= 0.3.6, < 0.5) + pathutil (~> 0.9) + rouge (>= 3.0, < 5.0) + safe_yaml (~> 1.0) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) + jekyll-sass-converter (3.0.0) + sass-embedded (~> 1.54) + jekyll-watch (2.2.1) + listen (~> 3.0) + kramdown (2.4.0) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.4) + listen (3.9.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mercenary (0.4.0) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (6.0.1) + rake (13.2.1) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) + ffi (~> 1.0) + rexml (3.3.7) + rouge (4.3.0) + safe_yaml (1.0.5) + sass-embedded (1.78.0) + google-protobuf (~> 4.27) + rake (>= 13) + sass-embedded (1.78.0-aarch64-linux-android) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-aarch64-linux-gnu) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-aarch64-linux-musl) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-aarch64-mingw-ucrt) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-arm-linux-androideabi) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-arm-linux-gnueabihf) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-arm-linux-musleabihf) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-arm64-darwin) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-riscv64-linux-android) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-riscv64-linux-gnu) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-riscv64-linux-musl) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-x86-cygwin) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-x86-linux-android) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-x86-linux-gnu) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-x86-linux-musl) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-x86-mingw-ucrt) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-x86_64-cygwin) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-x86_64-darwin) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-x86_64-linux-android) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-x86_64-linux-gnu) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-x86_64-linux-musl) + google-protobuf (~> 4.27) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + unicode-display_width (2.5.0) + webrick (1.8.1) + +PLATFORMS + aarch64-linux + aarch64-linux-android + aarch64-linux-gnu + aarch64-linux-musl + aarch64-mingw-ucrt + arm-linux-androideabi + arm-linux-gnu + arm-linux-gnueabihf + arm-linux-musl + arm-linux-musleabihf + arm64-darwin + riscv64-linux-android + riscv64-linux-gnu + riscv64-linux-musl + ruby + x86-cygwin + x86-linux + x86-linux-android + x86-linux-gnu + x86-linux-musl + x86-mingw-ucrt + x86_64-cygwin + x86_64-darwin + x86_64-linux-android + x86_64-linux-gnu + x86_64-linux-musl + +DEPENDENCIES + jekyll (~> 4.3) + +BUNDLED WITH + 2.5.18 diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 0000000..b509807 --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,25 @@ + + + + + + {{ page.title }} - OpenNeo Blog + + + +
+ +

+ OpenNeo Blog +

+

+ For + Dress to Impress, and uhh + maybe other things later! +

+
+ {{ content }} + + diff --git a/_layouts/post.html b/_layouts/post.html new file mode 100644 index 0000000..d7ed59f --- /dev/null +++ b/_layouts/post.html @@ -0,0 +1,19 @@ +--- +layout: default +--- + +
+
+
+

+ {{ page.title }} +

+

+ Posted on {{ page.date | date_to_string: "ordinal", "US" }}{% if + page.author %}, by {{ page.author }}{% endif %} +

+
+ + {{ content }} +
+
diff --git a/_posts/2024-09-11-state-of-dti-2024.md b/_posts/2024-09-11-state-of-dti-2024.md new file mode 100644 index 0000000..5b99ee5 --- /dev/null +++ b/_posts/2024-09-11-state-of-dti-2024.md @@ -0,0 +1,149 @@ +--- +layout: post +title: "State of DTI: 2024" +date: 2024-09-11 12:00:00 -0700 +author: Matchu +--- + +Hi, everyone! Hough, this post is a long time coming but I have not had the +power of Words—but today I do, and so we write! + +First off, thank you for being so kind and helpful as you always are! +Idk if y'all know that like, the community does the majority of the work for +DTI? We're just doing our best to keep the lil guy chuggin' along underneath you! And thank you always for your kind words, too 🥺 It helps a lot. + +After 15 years of DTI (what the heck??!), and 15 years of changing +circumstances, **our primary focus is keeping DTI around for the long-haul**. + +And, I'll be real with ya, the choices I made in earlier times weren't really designed for decades of operation 😅 + +- When I started DTI, I wasn't really uhh, good at working with others? So I + never put together a formal team, and I built a codebase that was difficult + to share. +- And when we rebooted as Impress 2020, I borrowed the technology and design + intuition I'd gained in _professional_ software—not realizing that's a + level of complexity designed for teams of _fifty_ to keep up with. + +But now, here we are, with _two_ apps instead of one, and just me as the +operational bottleneck—and my _own_ life focus has shifted more toward my +personal household, with not even enough volunteer time to even do the work to +_hand over the keys_ 😖 + +So, today, DTI development is mostly a time management game. That's why I've +been focusing on long-term choices I hope will change this in the years to +come! The themes are **stability, simplicity, and sustainability**. + +_I also want to call out and thank TNT in particular for their help with +sustainability!! The NeoPass partnership has been a genuine game changer—I'll +talk about it more below!_ + +### Stability: Changes to keep the site running + +At the start of the year, DTI was… uhhh, often broken 😖 We'd have multiple +days of downtime, and I'll be real with ya: it was _mostly_ an awareness and time management problem. + +Issues generally got resolved within hours or minutes of my sitting down to +_fix_ them, but… my world was large, and there were a lot of messes to clean +beyond just DTI 😭 So, I didn't discover issues quickly; and when I _did_, it +would sometimes take a few hours, or even days, to become available. + +When I was younger, it was easier to be on-call all the time… now, we have to be +smarter about it. So, we're being smarter! + +- **🔔 Alerts:** We've set up automated notifications to tell us when the + site goes down, or when a new kind of crash appears. _(If you're curious, + we're self-hosting [GlitchTip](https://glitchtip.com/)!)_ +- **⚙️ Auto-monitoring:** For crashes that _kept_ happening, we + configured our machine to intervene. _(Like, if the site's RAM usage gets + high, we now auto-restart it.)_ +- **🧑‍💻 Simplifying:** Reducing the complexity in our whole dang architecture + has been huge for stability, too. _(We'll talk about it more below!)_ + +With these changes, it's been months since our last like, _major_ downtime +event. We're still not as consistent as I'd like to be, but hey—more to come! + +### Simplicity: Cleaning house, clearing hallways + +The high-level goal here is: **I want to remove Impress 2020, but only once we +no longer need it**. + +Right now, Dress to Impress is a weird combination of apps… I copy-pasted some +of Impress 2020's best UI changes over, but it all still used the +Impress 2020 _server_ code, even when you're on `impress.openneo.net`. + +This both doubled the danger of downtime (if _either_ app goes down, +that's a problem for both!), and added networking complexities that are hard to +track down (hello, "error loading species/color"!) + +Like, it's just not a great situation for stability, _or_ for removing me as a +bottleneck. There's too much happening; and too much to know that, right now, +only I know! 😬 + +So, here's some of the changes we've been making: + +- **➡️ Porting features:** We finally brought Impress 2020's improved + Offering/Seeking trade listings page into the main app! +- **🌸 Simpler rewrites:** We reimplemented the item page preview in Rails and + plain HTML/CSS/JS, instead of being a fragile, frankenstein-y React component using + Impress 2020 behind the scenes. +- **⚡️ Rewiring the wardrobe:** The main outfit editor still has a _couple_ API + calls to Impress 2020, but very few! And we're exploring the possibility of + other ways to simplify that page, too. +- **🧹 Ancient code cleanups:** As I wander the halls of the very old + codebase, I occasionally stumble into something unused, or confusing, or + way more complicated than it needs to be. And so I clean up, so my future + roommates can be comfy here! + +A lot of it is invisible work, toward the goal of _destroying_ things rather +than building them. And that's important for us, I think: **long-term projects +with small teams survive by having _less_ stuff going on.** + +I won't get too much into why I chose to stick with upgrading the old app +(built with [Rails](https://rubyonrails.org/)), instead of keeping the new +Impress 2020 app (built with [Next.js](https://nextjs.org/)). Mostly just, I +think the Rails app is simpler tech overall, and leans more into standards that +I expect to be longer-lived—and so I expect it to be easier to maintain and +welcome new collaborators into long-term! + +We'll check in with y'all before retiring Impress 2020 altogether, I think +there's still plenty of steps along the way! We're just doing our best, bit by +bit. + +### Sustainability: Finding more time, with TNT's help + +At the start of the year, the reality of the situation was just… I did not +_have_ volunteer hours available to give to DTI. What time I _did_ have for +coding was all going toward my technical consulting work, because our house +needed the paycheck, y'know? + +But you might've noticed, our site's uptime got a lot better a few months +ago—as it happens, around the same time we launched NeoPass! This was because +**the NeoPass partnership _gave us the time_ to invest in other changes +like alerts and monitoring,** which just weren't happening on their own. + +**The new "Shopping List" feature was also part of this partnership effort, +too**—though we didn't end up building all of the integrated elements +we were hoping for. _(We were planning an "Add all to cart" NC Mall link, as +a time saver for folks, and a way to help TNT know that DTI helped you out.)_ +Ah, well—that's product work! I hope it's been helpful in this form, too! + +**Right now, we're on a bit of a pause,** as TNT's dev team focuses on the Void +Within plot and the other things on their plate. But our next plan is to look +into (spoiler) ~~saving DTI outfits to your Neopets directly~~ 😳❗️ This is +not a promise, but it _is_ an intention! It's the main integration y'all told us +you'd be excited for in that survey we sent out, thank you for that btw!! + +But personally, that's why I'm excited about this partnership: I think we've +done a good job threading the needle on building things that are **genuinely useful for Neopians, not Worrisome, and ultimately building toward DTI's own independent +goals, too.** I'm glad we're not in the same stagnant place we were earlier +this year, and I hope we can keep moving forward! + +_(By the way, TNT and I agreed not to talk too much about the details of, like, +what we signed and stuff… but I hope this gives you enough to understand the +needs and values we're bringing to it! I promise I'm giving the community my very best, always 💜)_ + +### As always, thank you! + +I hope this plan makes sense, as just one guy doing her best to keep the site +online! And I hope this work can help set the stage for more people to join in +the coming years, too. diff --git a/assets/css/main.css b/assets/css/main.css new file mode 100644 index 0000000..1601369 --- /dev/null +++ b/assets/css/main.css @@ -0,0 +1,133 @@ +body { + font-family: "Noto Sans", Helvetica, Arial, Verdana, sans-serif; + color: #040; + max-width: 800px; + margin-inline: auto; + padding-inline: 1em; +} + +a { + color: #226622; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: Delicious, "Noto Sans", Helvetica, Arial, Verdana, sans-serif; + + a { + color: inherit; + text-decoration: none; + &:hover { + text-decoration: underline; + } + } +} + +body > header { + display: grid; + grid-template-areas: + "logo title" + "logo subtitle"; + grid-template-rows: auto 1fr; + grid-template-columns: auto 1fr; + row-gap: 0.5em; + column-gap: 0.5em; + + border-bottom: 1px solid #060; + padding-bottom: 0.75em; + margin-bottom: 0.75em; + + .logo { + grid-area: logo; + img { + width: 4em; + height: 4em; + } + } + + h1 { + grid-area: title; + font-size: 1.5em; + margin: 0; + a { + color: inherit; + text-decoration: none; + &:hover { + text-decoration: underline; + } + } + } + + [role="doc-subtitle"] { + grid-area: subtitle; + font-size: 0.75em; + margin: 0; + } +} + +article { + > header { + h2 { + font-size: 2.5em; + margin-bottom: 0.125em; + margin-top: 0; + } + + p { + font-size: 0.75em; + margin-top: 0; + } + } + + > :is(p, ul) { + font-family: "Noto Serif", Georgia, "Times New Roman", Times, serif; + } + + h3 { + font-size: 1.5em; + } +} + +/* A font by Jos Buivenga (exljbris) -> www.exljbris.nl */ +@font-face { + font-family: Delicious; + src: local("Delicious"), url("/assets/fonts/Delicious-Roman.otf"); +} + +@font-face { + font-family: Delicious; + font-weight: bold; + src: local("Delicious"), url("/assets/fonts/Delicious-Bold.otf"); +} + +@font-face { + font-family: Delicious; + font-style: italic; + src: local("Delicious"), url("/assets/fonts/Delicious-Italic.otf"); +} + +@font-face { + font-family: "Noto Sans"; + src: local("Noto Sans"), url("/assets/fonts/NotoSans-Variable.ttf"); +} + +@font-face { + font-family: "Noto Sans"; + font-style: italic; + src: local("Noto Sans"), url("/assets/fonts/NotoSans-Italic-Variable.ttf"); +} + +@font-face { + font-family: "Noto Serif"; + src: local("Noto Serif"), url("/assets/fonts/NotoSerif-Variable.ttf"); +} + +@font-face { + font-family: "Noto Serif"; + font-style: italic; + src: local("Noto Serif"), url("/assets/fonts/NotoSerif-Italic-Variable.ttf"); +} diff --git a/assets/fonts/Delicious-Bold.otf b/assets/fonts/Delicious-Bold.otf new file mode 100644 index 0000000..e5b1e25 Binary files /dev/null and b/assets/fonts/Delicious-Bold.otf differ diff --git a/assets/fonts/Delicious-Heavy.otf b/assets/fonts/Delicious-Heavy.otf new file mode 100644 index 0000000..c6faccd Binary files /dev/null and b/assets/fonts/Delicious-Heavy.otf differ diff --git a/assets/fonts/Delicious-Italic.otf b/assets/fonts/Delicious-Italic.otf new file mode 100644 index 0000000..d57df3b Binary files /dev/null and b/assets/fonts/Delicious-Italic.otf differ diff --git a/assets/fonts/Delicious-Roman.otf b/assets/fonts/Delicious-Roman.otf new file mode 100644 index 0000000..31ec11a Binary files /dev/null and b/assets/fonts/Delicious-Roman.otf differ diff --git a/assets/fonts/NotoSans-Italic-Variable.ttf b/assets/fonts/NotoSans-Italic-Variable.ttf new file mode 100644 index 0000000..4e962ee Binary files /dev/null and b/assets/fonts/NotoSans-Italic-Variable.ttf differ diff --git a/assets/fonts/NotoSans-Variable.ttf b/assets/fonts/NotoSans-Variable.ttf new file mode 100644 index 0000000..f7d0d78 Binary files /dev/null and b/assets/fonts/NotoSans-Variable.ttf differ diff --git a/assets/fonts/NotoSerif-Italic-Variable.ttf b/assets/fonts/NotoSerif-Italic-Variable.ttf new file mode 100644 index 0000000..f4bd437 Binary files /dev/null and b/assets/fonts/NotoSerif-Italic-Variable.ttf differ diff --git a/assets/fonts/NotoSerif-Variable.ttf b/assets/fonts/NotoSerif-Variable.ttf new file mode 100644 index 0000000..debad16 Binary files /dev/null and b/assets/fonts/NotoSerif-Variable.ttf differ diff --git a/assets/images/logo.png b/assets/images/logo.png new file mode 100644 index 0000000..c40c2d9 Binary files /dev/null and b/assets/images/logo.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..090661f --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ +--- +layout: default +title: "Home" +--- + +