Hi, I’m Karl Horky (GitHub, LinkedIn), Technical Founder at UpLeveled - tech education programs for all skill levels.
In an educational landscape of AI-generated solutions, disconnected islands of knowledge and barriers to entry, I focus on helping students level up by designing accessible curricula and contributing to Open Source.
I’ve been in Open Source for over 13 years, and in tech for more than 20, through which I have used a range of languages and technologies, from QBasic and C to Perl, PHP, Python, Ruby on Rails and then finally on to JavaScript / TypeScript.
Now I mostly work with TypeScript, React, Next.js, Node.js, SQL and Bash.
Through my work in education, I’ve become interested in:
prettier-plugin-embed,
Postgres.jsMy work at UpLeveled has focused on designing, developing and delivering accessible curricula for students ranging from beginners to more experienced engineers.
As part of this work, we maintain some of our own Open Source projects:
eslint-config-upleveled
and eslint-plugin-upleveled:
ESLint config and plugin with custom rulesIn addition to our own projects, UpLeveled also lives what we teach and aims to be good Open Source citizens by contributing to other projects when we encounter problems.
One common type of problem we encounter is the “papercut”:
These papercuts can include errors during setup steps, documentation issues, small bugs and even security issues.
By fixing these papercuts, we can help students focus on learning and building projects, and raise all boats by contributing the fix to everyone else.
Another area of focus for UpLeveled is keeping up to date:
Some examples of issues and pull requests related to these upgrades:
In January 2023, while adopting the Next.js App Router and switching our material to React Server Components, we found that Route Handlers did not have the same capabilities to check return types using TypeScript, and contributed this feature to Next.js:
NextResponse in
vercel/next.jsDuring a June 2024 iteration on our Expo / React Native lecture, we
switched the scaffolder and template we used and dropped the obsolete
config in .npmrc:
create-expo-app + blank-typescript, remove
.npmrc cmds in upleveled/system-setupMore recently, a March 2025 upgrade to
eslint-import-resolver-typescript@4.2.0 caused resolution
errors for Bun modules like bun:test while using
eslint-plugin-import-x, which we fixed with a documentation
update:
bun option, fix ESM
import in un-ts/eslint-plugin-import-xOver the long term, another goal of UpLeveled is to help evolve the ecosystem by extending compatibility, encouraging adoption of new technologies and discussing new standards proposals.
Extending compatibility has included issues and pull requests such as:
node_modules/*/*.ts in
nodejs/typescriptporsager/postgrests-safeql/safeqlsql-formatter-org/sql-formatterEncouraging adoption of new technologies has also ranged across multiple topics, but an area which has often required additional attention has been ESM, including TypeScript module resolution:
This expression is not callable in
postcss/postcssDefinitelyTyped/DefinitelyTyped.js extension) in
TypeScript in vercel/next.jsWhile we have not yet invested the time to become deeply involved in shaping standards by activities like writing spec docs or becoming a TC39 champion, we have at times added feedback in existing discussions or contributed short proposal notes:
await fetch.json(url)
proposal on Twittertc39/ecma402I can highly recommend getting involved in Open Source - benefits include the ability to:
There are plenty of resources on how to get started with open source, so I won’t write another guide on that. If you’re looking for a good place to start, try How to Contribute to Open Source by Open Source Guides.
Here are my more personal field notes for contributors:
During my time contributing to Open Source, I have also developed opinions on how projects can optimize their CX (Contributor Experience) for new contributors:
.github/instructions/*.instructions.md or
.cursor/rules/*.mdc