├── .npmrc ├── apps ├── api │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── auth │ │ │ ├── decorators │ │ │ │ ├── index.ts │ │ │ │ └── auth.decorator.ts │ │ │ ├── services │ │ │ │ └── index.ts │ │ │ ├── strategies │ │ │ │ └── index.ts │ │ │ ├── repositories │ │ │ │ ├── index.ts │ │ │ │ └── user.repository.ts │ │ │ ├── serializers │ │ │ │ ├── index.ts │ │ │ │ └── auth.serializer.ts │ │ │ ├── exceptions │ │ │ │ ├── index.ts │ │ │ │ └── invalid-token.exception.ts │ │ │ ├── guards │ │ │ │ ├── index.ts │ │ │ │ └── twitch-auth.guard.ts │ │ │ └── auth.module.ts │ │ ├── admin │ │ │ ├── gateways │ │ │ │ └── index.ts │ │ │ ├── repositories │ │ │ │ ├── index.ts │ │ │ │ ├── skin.repository.ts │ │ │ │ ├── action.repository.ts │ │ │ │ └── skin-collection.repository.ts │ │ │ ├── twitch │ │ │ │ └── token-revoked.exception.ts │ │ │ ├── controllers │ │ │ │ ├── index.ts │ │ │ │ ├── action.controller.ts │ │ │ │ ├── user.controller.ts │ │ │ │ └── session.controller.ts │ │ │ ├── services │ │ │ │ ├── index.ts │ │ │ │ ├── chat-message.service.ts │ │ │ │ └── sprite.service.ts │ │ │ ├── exceptions │ │ │ │ └── twitch-http.exception.ts │ │ │ └── filters │ │ │ │ └── twitch-http-exception.filter.ts │ │ ├── app │ │ │ └── controllers │ │ │ │ ├── index.ts │ │ │ │ └── app.controller.ts │ │ ├── constants.ts │ │ ├── database │ │ │ ├── seed │ │ │ │ ├── skins │ │ │ │ │ ├── dudes.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── actions │ │ │ │ │ ├── resurrect.ts │ │ │ │ │ ├── add_jump_hits.ts │ │ │ │ │ ├── color.ts │ │ │ │ │ ├── sprite.ts │ │ │ │ │ ├── dash.ts │ │ │ │ │ ├── grow.ts │ │ │ │ │ ├── jump.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── commands │ │ │ │ │ └── index.ts │ │ │ │ └── seed.ts │ │ │ ├── database.module.ts │ │ │ └── prisma.service.ts │ │ ├── instruments.ts │ │ ├── pipes │ │ │ └── zod.pipe.ts │ │ └── filters │ │ │ └── zod.filter.ts │ ├── eslint.config.mjs │ ├── tsconfig.build.json │ ├── prisma │ │ └── migrations │ │ │ ├── migration_lock.toml │ │ │ ├── 20240121195332_add_action_data_command_data │ │ │ └── migration.sql │ │ │ ├── 20240117143624_add_settings_table │ │ │ └── migration.sql │ │ │ └── 20240411135958_chatter │ │ │ └── migration.sql │ ├── nest-cli.json │ ├── .env.example │ └── tsconfig.json ├── admin │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── vite-env.d.ts │ │ ├── lib │ │ │ └── utils.ts │ │ ├── components │ │ │ ├── common │ │ │ │ └── Loader.tsx │ │ │ ├── Auth │ │ │ │ └── use-auth.tsx │ │ │ ├── Layout │ │ │ │ ├── Layout.tsx │ │ │ │ └── Footer.tsx │ │ │ └── ui │ │ │ │ ├── label.tsx │ │ │ │ ├── textarea.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── input.tsx │ │ │ │ └── toaster.tsx │ │ ├── main.tsx │ │ ├── queries │ │ │ ├── actions.ts │ │ │ ├── rewards.ts │ │ │ ├── chatters.ts │ │ │ ├── commands.ts │ │ │ ├── settings.ts │ │ │ └── user-skins.ts │ │ └── i18n.ts │ ├── public │ │ └── favicon.ico │ ├── eslint.config.mjs │ ├── .env.example │ ├── tsconfig.json │ ├── index.html │ └── vite.config.ts ├── client │ ├── src │ │ ├── vite-env.d.ts │ │ ├── utils │ │ │ └── utils.ts │ │ ├── style.css │ │ └── main.ts │ ├── eslint.config.mjs │ ├── public │ │ └── favicon.ico │ ├── .env.example │ ├── tsconfig.json │ ├── index.html │ ├── package.json │ └── vite.config.ts └── website │ ├── public │ ├── google1fdca509a6189f25.html │ ├── favicon.ico │ ├── robots.txt │ ├── assets │ │ ├── obs.png │ │ ├── admin.png │ │ ├── setup1.png │ │ ├── setup2.png │ │ └── twitch.svg │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── apple-touch-icon.png │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── sitemap.xml │ ├── yandex_dd1696715a134c06.html │ └── site.webmanifest │ ├── postcss.config.mjs │ ├── src │ ├── app │ │ ├── page.tsx │ │ ├── terms │ │ │ └── layout.tsx │ │ └── privacy │ │ │ └── layout.tsx │ ├── mdx-components.tsx │ ├── utils │ │ └── index.ts │ ├── lib │ │ └── i18n │ │ │ ├── settings.ts │ │ │ └── index.ts │ └── components │ │ └── Card.tsx │ ├── next.config.ts │ ├── eslint.config.mjs │ ├── .gitignore │ └── tsconfig.json ├── .dockerignore ├── packages ├── database │ ├── .gitignore │ ├── tsconfig.json │ ├── prisma │ │ └── migrations │ │ │ ├── migration_lock.toml │ │ │ ├── 20240121195332_add_action_data_command_data │ │ │ └── migration.sql │ │ │ ├── 20240117143624_add_settings_table │ │ │ └── migration.sql │ │ │ └── 20240411135958_chatter │ │ │ └── migration.sql │ └── src │ │ ├── seed │ │ ├── skins │ │ │ ├── dudes.ts │ │ │ └── index.ts │ │ ├── actions │ │ │ ├── resurrect.ts │ │ │ ├── add_jump_hits.ts │ │ │ ├── color.ts │ │ │ ├── sprite.ts │ │ │ ├── dash.ts │ │ │ ├── grow.ts │ │ │ ├── jump.ts │ │ │ └── index.ts │ │ ├── seed.ts │ │ └── commands │ │ │ └── index.ts │ │ └── client.ts ├── types │ ├── src │ │ ├── index.ts │ │ ├── dto │ │ │ ├── message.ts │ │ │ ├── settings.ts │ │ │ ├── user.ts │ │ │ ├── user-skin.ts │ │ │ ├── index.ts │ │ │ ├── user-skin-collection.ts │ │ │ ├── command.ts │ │ │ ├── raid.ts │ │ │ ├── chatter.ts │ │ │ ├── reward.ts │ │ │ └── socket.ts │ │ └── schema │ │ │ ├── index.ts │ │ │ ├── user-skin.ts │ │ │ ├── user-skin-collection.ts │ │ │ ├── chatter.ts │ │ │ ├── settings.ts │ │ │ └── command.ts │ ├── tsconfig.json │ └── package.json ├── typescript-config │ ├── package.json │ ├── vite.json │ ├── base-nestjs.json │ ├── base.json │ └── nestjs.json └── eslint-config │ ├── package.json │ └── index.js ├── .prettierrc ├── pnpm-workspace.yaml ├── .prettierignore ├── static ├── poof.png ├── rip1.png ├── rip2.png ├── skull.png ├── weight.png ├── skins │ ├── tech │ │ ├── C.png │ │ ├── Go.png │ │ ├── JS.png │ │ ├── R-.png │ │ ├── TS.png │ │ ├── V8.png │ │ ├── APL.png │ │ ├── AWS.png │ │ ├── Akka.png │ │ ├── Atom.png │ │ ├── Awk.png │ │ ├── Bash.png │ │ ├── Bun.png │ │ ├── C++.png │ │ ├── CSS3.png │ │ ├── Dart.png │ │ ├── Deno.png │ │ ├── Elm.png │ │ ├── GCC.png │ │ ├── GIMP.png │ │ ├── Git.png │ │ ├── Haxe.png │ │ ├── Helm.png │ │ ├── Hugo.png │ │ ├── JSON.png │ │ ├── Java.png │ │ ├── Jeet.png │ │ ├── Jest.png │ │ ├── Jira.png │ │ ├── Jule.png │ │ ├── K3OS.png │ │ ├── K3s.png │ │ ├── Ktor.png │ │ ├── LLVM.png │ │ ├── Lua.png │ │ ├── MODX.png │ │ ├── MobX.png │ │ ├── NPM.png │ │ ├── Nano.png │ │ ├── Nim.png │ │ ├── Okta.png │ │ ├── PHP.png │ │ ├── Perl.png │ │ ├── Qwik.png │ │ ├── Ruby.png │ │ ├── Rust.png │ │ ├── SSH.png │ │ ├── Sass.png │ │ ├── TeX.png │ │ ├── UNIX.png │ │ ├── Vala.png │ │ ├── Vim.png │ │ ├── Vite.png │ │ ├── XML.png │ │ ├── YAML.png │ │ ├── Yarn.png │ │ ├── Zig.png │ │ ├── tech.png │ │ ├── AArch64.png │ │ ├── Algolia.png │ │ ├── Android.png │ │ ├── Angular.png │ │ ├── Ansible.png │ │ ├── Apache.png │ │ ├── Apple.png │ │ ├── Arduino.png │ │ ├── Argo-CD.png │ │ ├── Astro.png │ │ ├── Azios.png │ │ ├── Azure.png │ │ ├── Babel.png │ │ ├── Bamboo.png │ │ ├── Behance.png │ │ ├── Blender.png │ │ ├── Bower.png │ │ ├── Bulma.png │ │ ├── CLion.png │ │ ├── CMake.png │ │ ├── CSharp.png │ │ ├── CakePHP.png │ │ ├── Canva.png │ │ ├── CentOS.png │ │ ├── Chrome.png │ │ ├── Clarity.png │ │ ├── Clojure.png │ │ ├── CodePen.png │ │ ├── Codeac.png │ │ ├── Codecov.png │ │ ├── Consul.png │ │ ├── Contao.png │ │ ├── Core-js.png │ │ ├── CouchDB.png │ │ ├── Crystal.png │ │ ├── Cypress.png │ │ ├── D3.js.png │ │ ├── DBeaver.png │ │ ├── Debian.png │ │ ├── Devicon.png │ │ ├── Django.png │ │ ├── Docker.png │ │ ├── Drupal.png │ │ ├── ESLint.png │ │ ├── Elixir.png │ │ ├── Envoy.png │ │ ├── Erlang.png │ │ ├── Express.png │ │ ├── FSharp.png │ │ ├── FastAPI.png │ │ ├── Fastify.png │ │ ├── Fauna.png │ │ ├── Fedora.png │ │ ├── Figma.png │ │ ├── Firefox.png │ │ ├── Flask.png │ │ ├── Flutter.png │ │ ├── Fortran.png │ │ ├── Gatling.png │ │ ├── Gatsby.png │ │ ├── Gazebo.png │ │ ├── Gentoo.png │ │ ├── Ghost.png │ │ ├── GitBook.png │ │ ├── GitHub.png │ │ ├── GitLab.png │ │ ├── Gitpod.png │ │ ├── Gitter.png │ │ ├── GoLand.png │ │ ├── Google.png │ │ ├── Gradle.png │ │ ├── Grafana.png │ │ ├── Grails.png │ │ ├── GraphQL.png │ │ ├── Gulp.js.png │ │ ├── HTML5.png │ │ ├── Hardhat.png │ │ ├── Haskell.png │ │ ├── Heroku.png │ │ ├── IFTTT.png │ │ ├── Ionic.png │ │ ├── JUnit.png │ │ ├── Jasmine.png │ │ ├── Jekyll.png │ │ ├── Jenkins.png │ │ ├── Julia.png │ │ ├── Jupyter.png │ │ ├── Kaggle.png │ │ ├── Karma.png │ │ ├── Keras.png │ │ ├── Kibana.png │ │ ├── Knex.js.png │ │ ├── Kotlin.png │ │ ├── LaTeX.png │ │ ├── LabVIEW.png │ │ ├── Laravel.png │ │ ├── Less.js.png │ │ ├── Linux.png │ │ ├── Lumen.png │ │ ├── MATLAB.png │ │ ├── MS-DOS.png │ │ ├── Minitab.png │ │ ├── Mocha.png │ │ ├── MongoDB.png │ │ ├── Moodle.png │ │ ├── MySQL.png │ │ ├── NGINX.png │ │ ├── Nerog.png │ │ ├── Nest.js.png │ │ ├── New4j.png │ │ ├── Next.js.png │ │ ├── Nimble.png │ │ ├── NixOS.png │ │ ├── Node.js.png │ │ ├── Nodemon.png │ │ ├── NuGet.png │ │ ├── NumPy.png │ │ ├── Nuxt-JS.png │ │ ├── OCaml.png │ │ ├── OpenAL.png │ │ ├── OpenAPI.png │ │ ├── OpenCL.png │ │ ├── OpenCV.png │ │ ├── OpenGL.png │ │ ├── Opera.png │ │ ├── Oracle.png │ │ ├── Packer.png │ │ ├── Pandas.png │ │ ├── Phalcon.png │ │ ├── Ploty.png │ │ ├── Podman.png │ │ ├── Polygon.png │ │ ├── PostCSS.png │ │ ├── Postman.png │ │ ├── PuTTY.png │ │ ├── PyCharm.png │ │ ├── PyTorch.png │ │ ├── Python.png │ │ ├── Qodana.png │ │ ├── Quarkus.png │ │ ├── Quasar.png │ │ ├── RSpec.png │ │ ├── RStudio.png │ │ ├── Rancher.png │ │ ├── Reach.png │ │ ├── React.png │ │ ├── Realm.png │ │ ├── Red-Hat.png │ │ ├── Redis.png │ │ ├── Redux.png │ │ ├── Ren'Py.png │ │ ├── Rider.png │ │ ├── RocksDB.png │ │ ├── SQLite.png │ │ ├── Sanity.png │ │ ├── Scala.png │ │ ├── Sketch.png │ │ ├── Slack.png │ │ ├── Splunk.png │ │ ├── Spring.png │ │ ├── Stata.png │ │ ├── Stylus.png │ │ ├── Svelte.png │ │ ├── Swagger.png │ │ ├── Swift.png │ │ ├── Symfony.png │ │ ├── TYPO3.png │ │ ├── Tauri.png │ │ ├── Tower.png │ │ ├── Trello.png │ │ ├── Twitter.png │ │ ├── Ubuntu.png │ │ ├── Unity.png │ │ ├── Vercel.png │ │ ├── Veutify.png │ │ ├── Vite.js.png │ │ ├── Vue.js.png │ │ ├── Vyper.png │ │ ├── Webflow.png │ │ ├── Weblate.png │ │ ├── Webpack.png │ │ ├── Xamarin.png │ │ ├── Xcode.png │ │ ├── jQuery.png │ │ ├── p5-JS.png │ │ ├── pfSense.png │ │ ├── pytest.png │ │ ├── uWSGI.png │ │ ├── vSphere.png │ │ ├── Adobe-XD.png │ │ ├── AdonisJS.png │ │ ├── Alpine.js.png │ │ ├── Anaconda.png │ │ ├── AngularJS.png │ │ ├── Appwrite.png │ │ ├── Ballerina.png │ │ ├── BitBucket.png │ │ ├── Bootstrap.png │ │ ├── Capacitor.png │ │ ├── CircleCI.png │ │ ├── Composer.png │ │ ├── Cosmos-BD.png │ │ ├── Cucumber.png │ │ ├── DataGrip.png │ │ ├── DataSpell.png │ │ ├── Doctrine.png │ │ ├── Electron.png │ │ ├── Ember.js.png │ │ ├── Facebook.png │ │ ├── Feathers.png │ │ ├── FileZilla.png │ │ ├── Firebase.png │ │ ├── GNU-Emacs.png │ │ ├── Grunt.js.png │ │ ├── Harvester.png │ │ ├── Hibernate.png │ │ ├── Homebrew.png │ │ ├── InfluxDB.png │ │ ├── Inkscape-.png │ │ ├── Insomnia.png │ │ ├── Jamstack.png │ │ ├── JetBrains.png │ │ ├── Knockout.png │ │ ├── Krakenjs.png │ │ ├── LinkedIn.png │ │ ├── Liquibase.png │ │ ├── Livewire.png │ │ ├── Logstash.png │ │ ├── Markdown.png │ │ ├── Meteor.js.png │ │ ├── Moleculer.png │ │ ├── NetworkX.png │ │ ├── Oh-my-zsh.png │ │ ├── OpenStack.png │ │ ├── PhpStorm.png │ │ ├── Playwrite.png │ │ ├── Portainer.png │ │ ├── PyScript.png │ │ ├── RabbitMQ.png │ │ ├── Rollup.js.png │ │ ├── RubyMine.png │ │ ├── Scalingo.png │ │ ├── Selenium.png │ │ ├── Sequelize.png │ │ ├── Shopware.png │ │ ├── Socket.io.png │ │ ├── Solid.js.png │ │ ├── Solidity.png │ │ ├── SonarQube.png │ │ ├── Storybook.png │ │ ├── Streamlit.png │ │ ├── Three.js.png │ │ ├── Travis-CI.png │ │ ├── WebStorm.png │ │ ├── Windows-8.png │ │ ├── WordPress.png │ │ ├── Yuno-Host.png │ │ ├── openSUSE.png │ │ ├── Ant-Design.png │ │ ├── Apache-Kafka.png │ │ ├── Apache-Maven.png │ │ ├── Apache-Spark.png │ │ ├── Appcelerator.png │ │ ├── Apple-Safari.png │ │ ├── Arch-Linux.png │ │ ├── Azure-Devops.png │ │ ├── Backbone.js.png │ │ ├── BrowserStack.png │ │ ├── Cloudflare.png │ │ ├── CodeIgniter.png │ │ ├── CoffeeScript.png │ │ ├── Confluence.png │ │ ├── Discord.js.png │ │ ├── Django-REST.png │ │ ├── Dropwizard.png │ │ ├── Eclipse-IDE.png │ │ ├── Embedded-C.png │ │ ├── Foundation.png │ │ ├── Godot-Engine.png │ │ ├── Google-Cloud.png │ │ ├── Handlebars.png │ │ ├── JavaScript.png │ │ ├── Jira-Align.png │ │ ├── Karate-Labs.png │ │ ├── Kubernetes.png │ │ ├── Material-UI.png │ │ ├── Materialize.png │ │ ├── Matplotlib.png │ │ ├── Mongoose.js.png │ │ ├── NHibernate.png │ │ ├── Objective-C.png │ │ ├── PostgresSQL.png │ │ ├── Powershell.png │ │ ├── Processing.png │ │ ├── Prometheus.png │ │ ├── PureScript.png │ │ ├── Qt-Framework.png │ │ ├── Raspberry-Pi.png │ │ ├── SQLAlchemy.png │ │ ├── Salesforce.png │ │ ├── Sourcetree.png │ │ ├── Tailwind-CSS.png │ │ ├── TensorFlow.png │ │ ├── Titanium-SDK.png │ │ ├── TortoiseGit.png │ │ ├── Traefik-Mesh.png │ │ ├── TypeScript.png │ │ ├── WebAssembly.png │ │ ├── Windows-11.png │ │ ├── WooCommerce.png │ │ ├── scikit-learn.png │ │ ├── After-Effects.png │ │ ├── Android-Studio.png │ │ ├── Apache-Airflow.png │ │ ├── Apache-Groovy.png │ │ ├── Apache-Hadoop.png │ │ ├── Apache-Tomcat.png │ │ ├── Autodesk-Maya.png │ │ ├── Cairo-Graphics.png │ │ ├── ClojureScript.png │ │ ├── Digital-Ocean.png │ │ ├── Eclipse-Ceylon.png │ │ ├── Eclipse-Vert.x.png │ │ ├── Elastic-Beats.png │ │ ├── Elastic-Search.png │ │ ├── GitHub-Actions.png │ │ ├── IntelliJ-IDEA.png │ │ ├── Jaeger-Tracing.png │ │ ├── OpenTelemetry.png │ │ ├── Photon-Engine-.png │ │ ├── Python-Poetry.png │ │ ├── Read-the-Docs.png │ │ ├── Ruby-on-Rails.png │ │ ├── SQL-Developer.png │ │ ├── Sema-Software.png │ │ ├── Stack-Overflow.png │ │ ├── The-Algorithms.png │ │ ├── Traefik-Proxy.png │ │ ├── Unreal-Engine.png │ │ ├── Visual-Studio.png │ │ ├── Vue-Storefront.png │ │ ├── Yii-Framework.png │ │ ├── Zend-Framework.png │ │ ├── Adobe-Illustrator.png │ │ ├── Adobe-Photoshop.png │ │ ├── Apache-Cassandra.png │ │ ├── Apache-Subversion.png │ │ ├── Autodesk-ShotGrid.png │ │ ├── Eleventy-(11ty).png │ │ ├── GitHub-Codespaces.png │ │ ├── HashiCorp-Vagrant.png │ │ ├── HashiCorp-Vault.png │ │ ├── Phoenix-Framework.png │ │ ├── Protractor-Test.png │ │ ├── React-Bootstrap.png │ │ ├── Adobe-Premiere-Pro.png │ │ ├── Azure-SQL-Database.png │ │ ├── Cloudflare-Workers.png │ │ ├── HashiCorp-Terraform.png │ │ ├── IBM-SPSS-Statistics.png │ │ ├── NW.js-(node-webkit).png │ │ ├── Microsoft-SQL-Server.png │ │ ├── Adobe-Commerce-(Magneto).png │ │ ├── Internet-Explorer-10-(ie10).png │ │ ├── Robot-Operating-System-(ROS).png │ │ ├── Visual-Studio-Code-(VS-Code).png │ │ ├── Simple-DirectMedia-Layer-(SDL).png │ │ ├── Unified-Modelling-Language-(UML).png │ │ ├── RedCube's-epic-Compiler-Thingy-programming-(ReCT).png │ │ └── data.json │ └── dudes │ │ ├── cat │ │ ├── sprite.png │ │ └── data.json │ │ ├── duck │ │ ├── sprite.png │ │ └── data.json │ │ ├── dude │ │ ├── sprite.png │ │ └── data.json │ │ ├── girl │ │ ├── sprite.png │ │ └── data.json │ │ ├── nerd │ │ ├── sprite.png │ │ └── data.json │ │ ├── nyan │ │ ├── sprite.png │ │ └── data.json │ │ ├── owl │ │ ├── sprite.png │ │ └── data.json │ │ ├── sith │ │ ├── sprite.png │ │ └── data.json │ │ ├── agent │ │ ├── sprite.png │ │ └── data.json │ │ ├── senior │ │ ├── sprite.png │ │ └── data.json │ │ ├── sponge │ │ ├── sprite.png │ │ └── data.json │ │ └── duck_evil │ │ ├── sprite.png │ │ └── data.json ├── sounds │ └── jump.mp3 └── fonts │ ├── Rubik-VariableFont_wght.ttf │ └── Rubik-Italic-VariableFont_wght.ttf ├── .devcontainer ├── Dockerfile └── devcontainer.extend.yml ├── .editorconfig ├── components.json ├── .github └── dependabot.yml ├── compose.dev.yaml ├── package.json └── .gitignore /.npmrc: -------------------------------------------------------------------------------- 1 | save-exact=true 2 | -------------------------------------------------------------------------------- /apps/api/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /apps/admin/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/database/.gitignore: -------------------------------------------------------------------------------- 1 | generated 2 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true 3 | } 4 | -------------------------------------------------------------------------------- /apps/admin/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /apps/client/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - "apps/*" 3 | - "packages/*" 4 | -------------------------------------------------------------------------------- /apps/api/src/auth/decorators/index.ts: -------------------------------------------------------------------------------- 1 | export { Auth } from './auth.decorator'; 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Add files here to ignore them from prettier formatting 2 | /dist 3 | -------------------------------------------------------------------------------- /apps/api/src/auth/services/index.ts: -------------------------------------------------------------------------------- 1 | export { AuthService } from './auth.service'; 2 | -------------------------------------------------------------------------------- /packages/types/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './dto'; 2 | export * from './schema'; 3 | -------------------------------------------------------------------------------- /static/poof.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/poof.png -------------------------------------------------------------------------------- /static/rip1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/rip1.png -------------------------------------------------------------------------------- /static/rip2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/rip2.png -------------------------------------------------------------------------------- /static/skull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skull.png -------------------------------------------------------------------------------- /apps/api/src/admin/gateways/index.ts: -------------------------------------------------------------------------------- 1 | export { EventsGateway } from './events.gateway'; 2 | -------------------------------------------------------------------------------- /apps/api/src/auth/strategies/index.ts: -------------------------------------------------------------------------------- 1 | export { TwitchStrategy } from './twitch.strategy'; 2 | -------------------------------------------------------------------------------- /static/weight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/weight.png -------------------------------------------------------------------------------- /apps/api/src/auth/repositories/index.ts: -------------------------------------------------------------------------------- 1 | export { UserRepository } from './user.repository'; 2 | -------------------------------------------------------------------------------- /apps/api/src/auth/serializers/index.ts: -------------------------------------------------------------------------------- 1 | export { AuthSerializer } from './auth.serializer'; 2 | -------------------------------------------------------------------------------- /apps/website/public/google1fdca509a6189f25.html: -------------------------------------------------------------------------------- 1 | google-site-verification: google1fdca509a6189f25.html -------------------------------------------------------------------------------- /static/skins/tech/C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/C.png -------------------------------------------------------------------------------- /static/skins/tech/Go.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Go.png -------------------------------------------------------------------------------- /static/skins/tech/JS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/JS.png -------------------------------------------------------------------------------- /static/skins/tech/R-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/R-.png -------------------------------------------------------------------------------- /static/skins/tech/TS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/TS.png -------------------------------------------------------------------------------- /static/skins/tech/V8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/V8.png -------------------------------------------------------------------------------- /static/sounds/jump.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/sounds/jump.mp3 -------------------------------------------------------------------------------- /apps/api/src/auth/exceptions/index.ts: -------------------------------------------------------------------------------- 1 | export { InvalidTokenException } from './invalid-token.exception'; 2 | -------------------------------------------------------------------------------- /static/skins/tech/APL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/APL.png -------------------------------------------------------------------------------- /static/skins/tech/AWS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/AWS.png -------------------------------------------------------------------------------- /static/skins/tech/Akka.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Akka.png -------------------------------------------------------------------------------- /static/skins/tech/Atom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Atom.png -------------------------------------------------------------------------------- /static/skins/tech/Awk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Awk.png -------------------------------------------------------------------------------- /static/skins/tech/Bash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Bash.png -------------------------------------------------------------------------------- /static/skins/tech/Bun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Bun.png -------------------------------------------------------------------------------- /static/skins/tech/C++.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/C++.png -------------------------------------------------------------------------------- /static/skins/tech/CSS3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/CSS3.png -------------------------------------------------------------------------------- /static/skins/tech/Dart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Dart.png -------------------------------------------------------------------------------- /static/skins/tech/Deno.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Deno.png -------------------------------------------------------------------------------- /static/skins/tech/Elm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Elm.png -------------------------------------------------------------------------------- /static/skins/tech/GCC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/GCC.png -------------------------------------------------------------------------------- /static/skins/tech/GIMP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/GIMP.png -------------------------------------------------------------------------------- /static/skins/tech/Git.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Git.png -------------------------------------------------------------------------------- /static/skins/tech/Haxe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Haxe.png -------------------------------------------------------------------------------- /static/skins/tech/Helm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Helm.png -------------------------------------------------------------------------------- /static/skins/tech/Hugo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Hugo.png -------------------------------------------------------------------------------- /static/skins/tech/JSON.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/JSON.png -------------------------------------------------------------------------------- /static/skins/tech/Java.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Java.png -------------------------------------------------------------------------------- /static/skins/tech/Jeet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Jeet.png -------------------------------------------------------------------------------- /static/skins/tech/Jest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Jest.png -------------------------------------------------------------------------------- /static/skins/tech/Jira.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Jira.png -------------------------------------------------------------------------------- /static/skins/tech/Jule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Jule.png -------------------------------------------------------------------------------- /static/skins/tech/K3OS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/K3OS.png -------------------------------------------------------------------------------- /static/skins/tech/K3s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/K3s.png -------------------------------------------------------------------------------- /static/skins/tech/Ktor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Ktor.png -------------------------------------------------------------------------------- /static/skins/tech/LLVM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/LLVM.png -------------------------------------------------------------------------------- /static/skins/tech/Lua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Lua.png -------------------------------------------------------------------------------- /static/skins/tech/MODX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/MODX.png -------------------------------------------------------------------------------- /static/skins/tech/MobX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/MobX.png -------------------------------------------------------------------------------- /static/skins/tech/NPM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/NPM.png -------------------------------------------------------------------------------- /static/skins/tech/Nano.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Nano.png -------------------------------------------------------------------------------- /static/skins/tech/Nim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Nim.png -------------------------------------------------------------------------------- /static/skins/tech/Okta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Okta.png -------------------------------------------------------------------------------- /static/skins/tech/PHP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/PHP.png -------------------------------------------------------------------------------- /static/skins/tech/Perl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Perl.png -------------------------------------------------------------------------------- /static/skins/tech/Qwik.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Qwik.png -------------------------------------------------------------------------------- /static/skins/tech/Ruby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Ruby.png -------------------------------------------------------------------------------- /static/skins/tech/Rust.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Rust.png -------------------------------------------------------------------------------- /static/skins/tech/SSH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/SSH.png -------------------------------------------------------------------------------- /static/skins/tech/Sass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Sass.png -------------------------------------------------------------------------------- /static/skins/tech/TeX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/TeX.png -------------------------------------------------------------------------------- /static/skins/tech/UNIX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/UNIX.png -------------------------------------------------------------------------------- /static/skins/tech/Vala.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Vala.png -------------------------------------------------------------------------------- /static/skins/tech/Vim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Vim.png -------------------------------------------------------------------------------- /static/skins/tech/Vite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Vite.png -------------------------------------------------------------------------------- /static/skins/tech/XML.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/XML.png -------------------------------------------------------------------------------- /static/skins/tech/YAML.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/YAML.png -------------------------------------------------------------------------------- /static/skins/tech/Yarn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Yarn.png -------------------------------------------------------------------------------- /static/skins/tech/Zig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Zig.png -------------------------------------------------------------------------------- /static/skins/tech/tech.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/tech.png -------------------------------------------------------------------------------- /apps/admin/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/apps/admin/public/favicon.ico -------------------------------------------------------------------------------- /apps/api/src/app/controllers/index.ts: -------------------------------------------------------------------------------- 1 | export { AppController as UserController } from './app.controller'; 2 | -------------------------------------------------------------------------------- /static/skins/tech/AArch64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/AArch64.png -------------------------------------------------------------------------------- /static/skins/tech/Algolia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Algolia.png -------------------------------------------------------------------------------- /static/skins/tech/Android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Android.png -------------------------------------------------------------------------------- /static/skins/tech/Angular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Angular.png -------------------------------------------------------------------------------- /static/skins/tech/Ansible.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Ansible.png -------------------------------------------------------------------------------- /static/skins/tech/Apache.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Apache.png -------------------------------------------------------------------------------- /static/skins/tech/Apple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Apple.png -------------------------------------------------------------------------------- /static/skins/tech/Arduino.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Arduino.png -------------------------------------------------------------------------------- /static/skins/tech/Argo-CD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Argo-CD.png -------------------------------------------------------------------------------- /static/skins/tech/Astro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Astro.png -------------------------------------------------------------------------------- /static/skins/tech/Azios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Azios.png -------------------------------------------------------------------------------- /static/skins/tech/Azure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Azure.png -------------------------------------------------------------------------------- /static/skins/tech/Babel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Babel.png -------------------------------------------------------------------------------- /static/skins/tech/Bamboo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Bamboo.png -------------------------------------------------------------------------------- /static/skins/tech/Behance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Behance.png -------------------------------------------------------------------------------- /static/skins/tech/Blender.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Blender.png -------------------------------------------------------------------------------- /static/skins/tech/Bower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Bower.png -------------------------------------------------------------------------------- /static/skins/tech/Bulma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Bulma.png -------------------------------------------------------------------------------- /static/skins/tech/CLion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/CLion.png -------------------------------------------------------------------------------- /static/skins/tech/CMake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/CMake.png -------------------------------------------------------------------------------- /static/skins/tech/CSharp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/CSharp.png -------------------------------------------------------------------------------- /static/skins/tech/CakePHP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/CakePHP.png -------------------------------------------------------------------------------- /static/skins/tech/Canva.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Canva.png -------------------------------------------------------------------------------- /static/skins/tech/CentOS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/CentOS.png -------------------------------------------------------------------------------- /static/skins/tech/Chrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Chrome.png -------------------------------------------------------------------------------- /static/skins/tech/Clarity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Clarity.png -------------------------------------------------------------------------------- /static/skins/tech/Clojure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Clojure.png -------------------------------------------------------------------------------- /static/skins/tech/CodePen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/CodePen.png -------------------------------------------------------------------------------- /static/skins/tech/Codeac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Codeac.png -------------------------------------------------------------------------------- /static/skins/tech/Codecov.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Codecov.png -------------------------------------------------------------------------------- /static/skins/tech/Consul.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Consul.png -------------------------------------------------------------------------------- /static/skins/tech/Contao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Contao.png -------------------------------------------------------------------------------- /static/skins/tech/Core-js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Core-js.png -------------------------------------------------------------------------------- /static/skins/tech/CouchDB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/CouchDB.png -------------------------------------------------------------------------------- /static/skins/tech/Crystal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Crystal.png -------------------------------------------------------------------------------- /static/skins/tech/Cypress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Cypress.png -------------------------------------------------------------------------------- /static/skins/tech/D3.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/D3.js.png -------------------------------------------------------------------------------- /static/skins/tech/DBeaver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/DBeaver.png -------------------------------------------------------------------------------- /static/skins/tech/Debian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Debian.png -------------------------------------------------------------------------------- /static/skins/tech/Devicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Devicon.png -------------------------------------------------------------------------------- /static/skins/tech/Django.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Django.png -------------------------------------------------------------------------------- /static/skins/tech/Docker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Docker.png -------------------------------------------------------------------------------- /static/skins/tech/Drupal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Drupal.png -------------------------------------------------------------------------------- /static/skins/tech/ESLint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/ESLint.png -------------------------------------------------------------------------------- /static/skins/tech/Elixir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Elixir.png -------------------------------------------------------------------------------- /static/skins/tech/Envoy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Envoy.png -------------------------------------------------------------------------------- /static/skins/tech/Erlang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Erlang.png -------------------------------------------------------------------------------- /static/skins/tech/Express.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Express.png -------------------------------------------------------------------------------- /static/skins/tech/FSharp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/FSharp.png -------------------------------------------------------------------------------- /static/skins/tech/FastAPI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/FastAPI.png -------------------------------------------------------------------------------- /static/skins/tech/Fastify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Fastify.png -------------------------------------------------------------------------------- /static/skins/tech/Fauna.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Fauna.png -------------------------------------------------------------------------------- /static/skins/tech/Fedora.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Fedora.png -------------------------------------------------------------------------------- /static/skins/tech/Figma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Figma.png -------------------------------------------------------------------------------- /static/skins/tech/Firefox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Firefox.png -------------------------------------------------------------------------------- /static/skins/tech/Flask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Flask.png -------------------------------------------------------------------------------- /static/skins/tech/Flutter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Flutter.png -------------------------------------------------------------------------------- /static/skins/tech/Fortran.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Fortran.png -------------------------------------------------------------------------------- /static/skins/tech/Gatling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Gatling.png -------------------------------------------------------------------------------- /static/skins/tech/Gatsby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Gatsby.png -------------------------------------------------------------------------------- /static/skins/tech/Gazebo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Gazebo.png -------------------------------------------------------------------------------- /static/skins/tech/Gentoo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Gentoo.png -------------------------------------------------------------------------------- /static/skins/tech/Ghost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Ghost.png -------------------------------------------------------------------------------- /static/skins/tech/GitBook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/GitBook.png -------------------------------------------------------------------------------- /static/skins/tech/GitHub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/GitHub.png -------------------------------------------------------------------------------- /static/skins/tech/GitLab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/GitLab.png -------------------------------------------------------------------------------- /static/skins/tech/Gitpod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Gitpod.png -------------------------------------------------------------------------------- /static/skins/tech/Gitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Gitter.png -------------------------------------------------------------------------------- /static/skins/tech/GoLand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/GoLand.png -------------------------------------------------------------------------------- /static/skins/tech/Google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Google.png -------------------------------------------------------------------------------- /static/skins/tech/Gradle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Gradle.png -------------------------------------------------------------------------------- /static/skins/tech/Grafana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Grafana.png -------------------------------------------------------------------------------- /static/skins/tech/Grails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Grails.png -------------------------------------------------------------------------------- /static/skins/tech/GraphQL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/GraphQL.png -------------------------------------------------------------------------------- /static/skins/tech/Gulp.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Gulp.js.png -------------------------------------------------------------------------------- /static/skins/tech/HTML5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/HTML5.png -------------------------------------------------------------------------------- /static/skins/tech/Hardhat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Hardhat.png -------------------------------------------------------------------------------- /static/skins/tech/Haskell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Haskell.png -------------------------------------------------------------------------------- /static/skins/tech/Heroku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Heroku.png -------------------------------------------------------------------------------- /static/skins/tech/IFTTT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/IFTTT.png -------------------------------------------------------------------------------- /static/skins/tech/Ionic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Ionic.png -------------------------------------------------------------------------------- /static/skins/tech/JUnit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/JUnit.png -------------------------------------------------------------------------------- /static/skins/tech/Jasmine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Jasmine.png -------------------------------------------------------------------------------- /static/skins/tech/Jekyll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Jekyll.png -------------------------------------------------------------------------------- /static/skins/tech/Jenkins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Jenkins.png -------------------------------------------------------------------------------- /static/skins/tech/Julia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Julia.png -------------------------------------------------------------------------------- /static/skins/tech/Jupyter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Jupyter.png -------------------------------------------------------------------------------- /static/skins/tech/Kaggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Kaggle.png -------------------------------------------------------------------------------- /static/skins/tech/Karma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Karma.png -------------------------------------------------------------------------------- /static/skins/tech/Keras.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Keras.png -------------------------------------------------------------------------------- /static/skins/tech/Kibana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Kibana.png -------------------------------------------------------------------------------- /static/skins/tech/Knex.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Knex.js.png -------------------------------------------------------------------------------- /static/skins/tech/Kotlin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Kotlin.png -------------------------------------------------------------------------------- /static/skins/tech/LaTeX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/LaTeX.png -------------------------------------------------------------------------------- /static/skins/tech/LabVIEW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/LabVIEW.png -------------------------------------------------------------------------------- /static/skins/tech/Laravel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Laravel.png -------------------------------------------------------------------------------- /static/skins/tech/Less.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Less.js.png -------------------------------------------------------------------------------- /static/skins/tech/Linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Linux.png -------------------------------------------------------------------------------- /static/skins/tech/Lumen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Lumen.png -------------------------------------------------------------------------------- /static/skins/tech/MATLAB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/MATLAB.png -------------------------------------------------------------------------------- /static/skins/tech/MS-DOS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/MS-DOS.png -------------------------------------------------------------------------------- /static/skins/tech/Minitab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Minitab.png -------------------------------------------------------------------------------- /static/skins/tech/Mocha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Mocha.png -------------------------------------------------------------------------------- /static/skins/tech/MongoDB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/MongoDB.png -------------------------------------------------------------------------------- /static/skins/tech/Moodle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Moodle.png -------------------------------------------------------------------------------- /static/skins/tech/MySQL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/MySQL.png -------------------------------------------------------------------------------- /static/skins/tech/NGINX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/NGINX.png -------------------------------------------------------------------------------- /static/skins/tech/Nerog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Nerog.png -------------------------------------------------------------------------------- /static/skins/tech/Nest.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Nest.js.png -------------------------------------------------------------------------------- /static/skins/tech/New4j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/New4j.png -------------------------------------------------------------------------------- /static/skins/tech/Next.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Next.js.png -------------------------------------------------------------------------------- /static/skins/tech/Nimble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Nimble.png -------------------------------------------------------------------------------- /static/skins/tech/NixOS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/NixOS.png -------------------------------------------------------------------------------- /static/skins/tech/Node.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Node.js.png -------------------------------------------------------------------------------- /static/skins/tech/Nodemon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Nodemon.png -------------------------------------------------------------------------------- /static/skins/tech/NuGet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/NuGet.png -------------------------------------------------------------------------------- /static/skins/tech/NumPy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/NumPy.png -------------------------------------------------------------------------------- /static/skins/tech/Nuxt-JS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Nuxt-JS.png -------------------------------------------------------------------------------- /static/skins/tech/OCaml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/OCaml.png -------------------------------------------------------------------------------- /static/skins/tech/OpenAL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/OpenAL.png -------------------------------------------------------------------------------- /static/skins/tech/OpenAPI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/OpenAPI.png -------------------------------------------------------------------------------- /static/skins/tech/OpenCL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/OpenCL.png -------------------------------------------------------------------------------- /static/skins/tech/OpenCV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/OpenCV.png -------------------------------------------------------------------------------- /static/skins/tech/OpenGL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/OpenGL.png -------------------------------------------------------------------------------- /static/skins/tech/Opera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Opera.png -------------------------------------------------------------------------------- /static/skins/tech/Oracle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Oracle.png -------------------------------------------------------------------------------- /static/skins/tech/Packer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Packer.png -------------------------------------------------------------------------------- /static/skins/tech/Pandas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Pandas.png -------------------------------------------------------------------------------- /static/skins/tech/Phalcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Phalcon.png -------------------------------------------------------------------------------- /static/skins/tech/Ploty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Ploty.png -------------------------------------------------------------------------------- /static/skins/tech/Podman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Podman.png -------------------------------------------------------------------------------- /static/skins/tech/Polygon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Polygon.png -------------------------------------------------------------------------------- /static/skins/tech/PostCSS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/PostCSS.png -------------------------------------------------------------------------------- /static/skins/tech/Postman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Postman.png -------------------------------------------------------------------------------- /static/skins/tech/PuTTY.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/PuTTY.png -------------------------------------------------------------------------------- /static/skins/tech/PyCharm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/PyCharm.png -------------------------------------------------------------------------------- /static/skins/tech/PyTorch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/PyTorch.png -------------------------------------------------------------------------------- /static/skins/tech/Python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Python.png -------------------------------------------------------------------------------- /static/skins/tech/Qodana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Qodana.png -------------------------------------------------------------------------------- /static/skins/tech/Quarkus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Quarkus.png -------------------------------------------------------------------------------- /static/skins/tech/Quasar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Quasar.png -------------------------------------------------------------------------------- /static/skins/tech/RSpec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/RSpec.png -------------------------------------------------------------------------------- /static/skins/tech/RStudio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/RStudio.png -------------------------------------------------------------------------------- /static/skins/tech/Rancher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Rancher.png -------------------------------------------------------------------------------- /static/skins/tech/Reach.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Reach.png -------------------------------------------------------------------------------- /static/skins/tech/React.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/React.png -------------------------------------------------------------------------------- /static/skins/tech/Realm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Realm.png -------------------------------------------------------------------------------- /static/skins/tech/Red-Hat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Red-Hat.png -------------------------------------------------------------------------------- /static/skins/tech/Redis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Redis.png -------------------------------------------------------------------------------- /static/skins/tech/Redux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Redux.png -------------------------------------------------------------------------------- /static/skins/tech/Ren'Py.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Ren'Py.png -------------------------------------------------------------------------------- /static/skins/tech/Rider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Rider.png -------------------------------------------------------------------------------- /static/skins/tech/RocksDB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/RocksDB.png -------------------------------------------------------------------------------- /static/skins/tech/SQLite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/SQLite.png -------------------------------------------------------------------------------- /static/skins/tech/Sanity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Sanity.png -------------------------------------------------------------------------------- /static/skins/tech/Scala.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Scala.png -------------------------------------------------------------------------------- /static/skins/tech/Sketch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Sketch.png -------------------------------------------------------------------------------- /static/skins/tech/Slack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Slack.png -------------------------------------------------------------------------------- /static/skins/tech/Splunk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Splunk.png -------------------------------------------------------------------------------- /static/skins/tech/Spring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Spring.png -------------------------------------------------------------------------------- /static/skins/tech/Stata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Stata.png -------------------------------------------------------------------------------- /static/skins/tech/Stylus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Stylus.png -------------------------------------------------------------------------------- /static/skins/tech/Svelte.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Svelte.png -------------------------------------------------------------------------------- /static/skins/tech/Swagger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Swagger.png -------------------------------------------------------------------------------- /static/skins/tech/Swift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Swift.png -------------------------------------------------------------------------------- /static/skins/tech/Symfony.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Symfony.png -------------------------------------------------------------------------------- /static/skins/tech/TYPO3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/TYPO3.png -------------------------------------------------------------------------------- /static/skins/tech/Tauri.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Tauri.png -------------------------------------------------------------------------------- /static/skins/tech/Tower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Tower.png -------------------------------------------------------------------------------- /static/skins/tech/Trello.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Trello.png -------------------------------------------------------------------------------- /static/skins/tech/Twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Twitter.png -------------------------------------------------------------------------------- /static/skins/tech/Ubuntu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Ubuntu.png -------------------------------------------------------------------------------- /static/skins/tech/Unity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Unity.png -------------------------------------------------------------------------------- /static/skins/tech/Vercel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Vercel.png -------------------------------------------------------------------------------- /static/skins/tech/Veutify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Veutify.png -------------------------------------------------------------------------------- /static/skins/tech/Vite.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Vite.js.png -------------------------------------------------------------------------------- /static/skins/tech/Vue.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Vue.js.png -------------------------------------------------------------------------------- /static/skins/tech/Vyper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Vyper.png -------------------------------------------------------------------------------- /static/skins/tech/Webflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Webflow.png -------------------------------------------------------------------------------- /static/skins/tech/Weblate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Weblate.png -------------------------------------------------------------------------------- /static/skins/tech/Webpack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Webpack.png -------------------------------------------------------------------------------- /static/skins/tech/Xamarin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Xamarin.png -------------------------------------------------------------------------------- /static/skins/tech/Xcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Xcode.png -------------------------------------------------------------------------------- /static/skins/tech/jQuery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/jQuery.png -------------------------------------------------------------------------------- /static/skins/tech/p5-JS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/p5-JS.png -------------------------------------------------------------------------------- /static/skins/tech/pfSense.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/pfSense.png -------------------------------------------------------------------------------- /static/skins/tech/pytest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/pytest.png -------------------------------------------------------------------------------- /static/skins/tech/uWSGI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/uWSGI.png -------------------------------------------------------------------------------- /static/skins/tech/vSphere.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/vSphere.png -------------------------------------------------------------------------------- /apps/admin/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import config from '@repo/eslint-config'; 2 | 3 | export default [...config.react]; 4 | -------------------------------------------------------------------------------- /apps/api/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import config from "@repo/eslint-config"; 2 | 3 | export default [...config.base]; 4 | -------------------------------------------------------------------------------- /apps/client/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import config from "@repo/eslint-config"; 2 | 3 | export default [...config.base]; 4 | -------------------------------------------------------------------------------- /apps/client/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/apps/client/public/favicon.ico -------------------------------------------------------------------------------- /apps/website/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/apps/website/public/favicon.ico -------------------------------------------------------------------------------- /apps/website/public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / 3 | Sitemap: https://evotars.inferst.com/sitemap.xml 4 | -------------------------------------------------------------------------------- /static/skins/tech/Adobe-XD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Adobe-XD.png -------------------------------------------------------------------------------- /static/skins/tech/AdonisJS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/AdonisJS.png -------------------------------------------------------------------------------- /static/skins/tech/Alpine.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Alpine.js.png -------------------------------------------------------------------------------- /static/skins/tech/Anaconda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Anaconda.png -------------------------------------------------------------------------------- /static/skins/tech/AngularJS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/AngularJS.png -------------------------------------------------------------------------------- /static/skins/tech/Appwrite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Appwrite.png -------------------------------------------------------------------------------- /static/skins/tech/Ballerina.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Ballerina.png -------------------------------------------------------------------------------- /static/skins/tech/BitBucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/BitBucket.png -------------------------------------------------------------------------------- /static/skins/tech/Bootstrap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Bootstrap.png -------------------------------------------------------------------------------- /static/skins/tech/Capacitor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Capacitor.png -------------------------------------------------------------------------------- /static/skins/tech/CircleCI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/CircleCI.png -------------------------------------------------------------------------------- /static/skins/tech/Composer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Composer.png -------------------------------------------------------------------------------- /static/skins/tech/Cosmos-BD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Cosmos-BD.png -------------------------------------------------------------------------------- /static/skins/tech/Cucumber.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Cucumber.png -------------------------------------------------------------------------------- /static/skins/tech/DataGrip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/DataGrip.png -------------------------------------------------------------------------------- /static/skins/tech/DataSpell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/DataSpell.png -------------------------------------------------------------------------------- /static/skins/tech/Doctrine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Doctrine.png -------------------------------------------------------------------------------- /static/skins/tech/Electron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Electron.png -------------------------------------------------------------------------------- /static/skins/tech/Ember.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Ember.js.png -------------------------------------------------------------------------------- /static/skins/tech/Facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Facebook.png -------------------------------------------------------------------------------- /static/skins/tech/Feathers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Feathers.png -------------------------------------------------------------------------------- /static/skins/tech/FileZilla.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/FileZilla.png -------------------------------------------------------------------------------- /static/skins/tech/Firebase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Firebase.png -------------------------------------------------------------------------------- /static/skins/tech/GNU-Emacs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/GNU-Emacs.png -------------------------------------------------------------------------------- /static/skins/tech/Grunt.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Grunt.js.png -------------------------------------------------------------------------------- /static/skins/tech/Harvester.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Harvester.png -------------------------------------------------------------------------------- /static/skins/tech/Hibernate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Hibernate.png -------------------------------------------------------------------------------- /static/skins/tech/Homebrew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Homebrew.png -------------------------------------------------------------------------------- /static/skins/tech/InfluxDB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/InfluxDB.png -------------------------------------------------------------------------------- /static/skins/tech/Inkscape-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Inkscape-.png -------------------------------------------------------------------------------- /static/skins/tech/Insomnia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Insomnia.png -------------------------------------------------------------------------------- /static/skins/tech/Jamstack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Jamstack.png -------------------------------------------------------------------------------- /static/skins/tech/JetBrains.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/JetBrains.png -------------------------------------------------------------------------------- /static/skins/tech/Knockout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Knockout.png -------------------------------------------------------------------------------- /static/skins/tech/Krakenjs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Krakenjs.png -------------------------------------------------------------------------------- /static/skins/tech/LinkedIn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/LinkedIn.png -------------------------------------------------------------------------------- /static/skins/tech/Liquibase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Liquibase.png -------------------------------------------------------------------------------- /static/skins/tech/Livewire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Livewire.png -------------------------------------------------------------------------------- /static/skins/tech/Logstash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Logstash.png -------------------------------------------------------------------------------- /static/skins/tech/Markdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Markdown.png -------------------------------------------------------------------------------- /static/skins/tech/Meteor.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Meteor.js.png -------------------------------------------------------------------------------- /static/skins/tech/Moleculer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Moleculer.png -------------------------------------------------------------------------------- /static/skins/tech/NetworkX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/NetworkX.png -------------------------------------------------------------------------------- /static/skins/tech/Oh-my-zsh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Oh-my-zsh.png -------------------------------------------------------------------------------- /static/skins/tech/OpenStack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/OpenStack.png -------------------------------------------------------------------------------- /static/skins/tech/PhpStorm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/PhpStorm.png -------------------------------------------------------------------------------- /static/skins/tech/Playwrite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Playwrite.png -------------------------------------------------------------------------------- /static/skins/tech/Portainer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Portainer.png -------------------------------------------------------------------------------- /static/skins/tech/PyScript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/PyScript.png -------------------------------------------------------------------------------- /static/skins/tech/RabbitMQ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/RabbitMQ.png -------------------------------------------------------------------------------- /static/skins/tech/Rollup.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Rollup.js.png -------------------------------------------------------------------------------- /static/skins/tech/RubyMine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/RubyMine.png -------------------------------------------------------------------------------- /static/skins/tech/Scalingo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Scalingo.png -------------------------------------------------------------------------------- /static/skins/tech/Selenium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Selenium.png -------------------------------------------------------------------------------- /static/skins/tech/Sequelize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Sequelize.png -------------------------------------------------------------------------------- /static/skins/tech/Shopware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Shopware.png -------------------------------------------------------------------------------- /static/skins/tech/Socket.io.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Socket.io.png -------------------------------------------------------------------------------- /static/skins/tech/Solid.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Solid.js.png -------------------------------------------------------------------------------- /static/skins/tech/Solidity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Solidity.png -------------------------------------------------------------------------------- /static/skins/tech/SonarQube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/SonarQube.png -------------------------------------------------------------------------------- /static/skins/tech/Storybook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Storybook.png -------------------------------------------------------------------------------- /static/skins/tech/Streamlit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Streamlit.png -------------------------------------------------------------------------------- /static/skins/tech/Three.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Three.js.png -------------------------------------------------------------------------------- /static/skins/tech/Travis-CI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Travis-CI.png -------------------------------------------------------------------------------- /static/skins/tech/WebStorm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/WebStorm.png -------------------------------------------------------------------------------- /static/skins/tech/Windows-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Windows-8.png -------------------------------------------------------------------------------- /static/skins/tech/WordPress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/WordPress.png -------------------------------------------------------------------------------- /static/skins/tech/Yuno-Host.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Yuno-Host.png -------------------------------------------------------------------------------- /static/skins/tech/openSUSE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/openSUSE.png -------------------------------------------------------------------------------- /apps/website/public/assets/obs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/apps/website/public/assets/obs.png -------------------------------------------------------------------------------- /static/skins/dudes/cat/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/dudes/cat/sprite.png -------------------------------------------------------------------------------- /static/skins/dudes/duck/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/dudes/duck/sprite.png -------------------------------------------------------------------------------- /static/skins/dudes/dude/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/dudes/dude/sprite.png -------------------------------------------------------------------------------- /static/skins/dudes/girl/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/dudes/girl/sprite.png -------------------------------------------------------------------------------- /static/skins/dudes/nerd/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/dudes/nerd/sprite.png -------------------------------------------------------------------------------- /static/skins/dudes/nyan/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/dudes/nyan/sprite.png -------------------------------------------------------------------------------- /static/skins/dudes/owl/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/dudes/owl/sprite.png -------------------------------------------------------------------------------- /static/skins/dudes/sith/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/dudes/sith/sprite.png -------------------------------------------------------------------------------- /static/skins/tech/Ant-Design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Ant-Design.png -------------------------------------------------------------------------------- /static/skins/tech/Apache-Kafka.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Apache-Kafka.png -------------------------------------------------------------------------------- /static/skins/tech/Apache-Maven.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Apache-Maven.png -------------------------------------------------------------------------------- /static/skins/tech/Apache-Spark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Apache-Spark.png -------------------------------------------------------------------------------- /static/skins/tech/Appcelerator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Appcelerator.png -------------------------------------------------------------------------------- /static/skins/tech/Apple-Safari.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Apple-Safari.png -------------------------------------------------------------------------------- /static/skins/tech/Arch-Linux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Arch-Linux.png -------------------------------------------------------------------------------- /static/skins/tech/Azure-Devops.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Azure-Devops.png -------------------------------------------------------------------------------- /static/skins/tech/Backbone.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Backbone.js.png -------------------------------------------------------------------------------- /static/skins/tech/BrowserStack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/BrowserStack.png -------------------------------------------------------------------------------- /static/skins/tech/Cloudflare.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Cloudflare.png -------------------------------------------------------------------------------- /static/skins/tech/CodeIgniter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/CodeIgniter.png -------------------------------------------------------------------------------- /static/skins/tech/CoffeeScript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/CoffeeScript.png -------------------------------------------------------------------------------- /static/skins/tech/Confluence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Confluence.png -------------------------------------------------------------------------------- /static/skins/tech/Discord.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Discord.js.png -------------------------------------------------------------------------------- /static/skins/tech/Django-REST.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Django-REST.png -------------------------------------------------------------------------------- /static/skins/tech/Dropwizard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Dropwizard.png -------------------------------------------------------------------------------- /static/skins/tech/Eclipse-IDE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Eclipse-IDE.png -------------------------------------------------------------------------------- /static/skins/tech/Embedded-C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Embedded-C.png -------------------------------------------------------------------------------- /static/skins/tech/Foundation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Foundation.png -------------------------------------------------------------------------------- /static/skins/tech/Godot-Engine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Godot-Engine.png -------------------------------------------------------------------------------- /static/skins/tech/Google-Cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Google-Cloud.png -------------------------------------------------------------------------------- /static/skins/tech/Handlebars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Handlebars.png -------------------------------------------------------------------------------- /static/skins/tech/JavaScript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/JavaScript.png -------------------------------------------------------------------------------- /static/skins/tech/Jira-Align.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Jira-Align.png -------------------------------------------------------------------------------- /static/skins/tech/Karate-Labs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Karate-Labs.png -------------------------------------------------------------------------------- /static/skins/tech/Kubernetes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Kubernetes.png -------------------------------------------------------------------------------- /static/skins/tech/Material-UI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Material-UI.png -------------------------------------------------------------------------------- /static/skins/tech/Materialize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Materialize.png -------------------------------------------------------------------------------- /static/skins/tech/Matplotlib.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Matplotlib.png -------------------------------------------------------------------------------- /static/skins/tech/Mongoose.js.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Mongoose.js.png -------------------------------------------------------------------------------- /static/skins/tech/NHibernate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/NHibernate.png -------------------------------------------------------------------------------- /static/skins/tech/Objective-C.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Objective-C.png -------------------------------------------------------------------------------- /static/skins/tech/PostgresSQL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/PostgresSQL.png -------------------------------------------------------------------------------- /static/skins/tech/Powershell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Powershell.png -------------------------------------------------------------------------------- /static/skins/tech/Processing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Processing.png -------------------------------------------------------------------------------- /static/skins/tech/Prometheus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Prometheus.png -------------------------------------------------------------------------------- /static/skins/tech/PureScript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/PureScript.png -------------------------------------------------------------------------------- /static/skins/tech/Qt-Framework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Qt-Framework.png -------------------------------------------------------------------------------- /static/skins/tech/Raspberry-Pi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Raspberry-Pi.png -------------------------------------------------------------------------------- /static/skins/tech/SQLAlchemy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/SQLAlchemy.png -------------------------------------------------------------------------------- /static/skins/tech/Salesforce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Salesforce.png -------------------------------------------------------------------------------- /static/skins/tech/Sourcetree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Sourcetree.png -------------------------------------------------------------------------------- /static/skins/tech/Tailwind-CSS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Tailwind-CSS.png -------------------------------------------------------------------------------- /static/skins/tech/TensorFlow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/TensorFlow.png -------------------------------------------------------------------------------- /static/skins/tech/Titanium-SDK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Titanium-SDK.png -------------------------------------------------------------------------------- /static/skins/tech/TortoiseGit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/TortoiseGit.png -------------------------------------------------------------------------------- /static/skins/tech/Traefik-Mesh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Traefik-Mesh.png -------------------------------------------------------------------------------- /static/skins/tech/TypeScript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/TypeScript.png -------------------------------------------------------------------------------- /static/skins/tech/WebAssembly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/WebAssembly.png -------------------------------------------------------------------------------- /static/skins/tech/Windows-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Windows-11.png -------------------------------------------------------------------------------- /static/skins/tech/WooCommerce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/WooCommerce.png -------------------------------------------------------------------------------- /static/skins/tech/scikit-learn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/scikit-learn.png -------------------------------------------------------------------------------- /apps/website/public/assets/admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/apps/website/public/assets/admin.png -------------------------------------------------------------------------------- /static/skins/dudes/agent/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/dudes/agent/sprite.png -------------------------------------------------------------------------------- /static/skins/dudes/senior/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/dudes/senior/sprite.png -------------------------------------------------------------------------------- /static/skins/dudes/sponge/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/dudes/sponge/sprite.png -------------------------------------------------------------------------------- /static/skins/tech/After-Effects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/After-Effects.png -------------------------------------------------------------------------------- /static/skins/tech/Android-Studio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Android-Studio.png -------------------------------------------------------------------------------- /static/skins/tech/Apache-Airflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Apache-Airflow.png -------------------------------------------------------------------------------- /static/skins/tech/Apache-Groovy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Apache-Groovy.png -------------------------------------------------------------------------------- /static/skins/tech/Apache-Hadoop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Apache-Hadoop.png -------------------------------------------------------------------------------- /static/skins/tech/Apache-Tomcat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Apache-Tomcat.png -------------------------------------------------------------------------------- /static/skins/tech/Autodesk-Maya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Autodesk-Maya.png -------------------------------------------------------------------------------- /static/skins/tech/Cairo-Graphics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Cairo-Graphics.png -------------------------------------------------------------------------------- /static/skins/tech/ClojureScript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/ClojureScript.png -------------------------------------------------------------------------------- /static/skins/tech/Digital-Ocean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Digital-Ocean.png -------------------------------------------------------------------------------- /static/skins/tech/Eclipse-Ceylon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Eclipse-Ceylon.png -------------------------------------------------------------------------------- /static/skins/tech/Eclipse-Vert.x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Eclipse-Vert.x.png -------------------------------------------------------------------------------- /static/skins/tech/Elastic-Beats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Elastic-Beats.png -------------------------------------------------------------------------------- /static/skins/tech/Elastic-Search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Elastic-Search.png -------------------------------------------------------------------------------- /static/skins/tech/GitHub-Actions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/GitHub-Actions.png -------------------------------------------------------------------------------- /static/skins/tech/IntelliJ-IDEA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/IntelliJ-IDEA.png -------------------------------------------------------------------------------- /static/skins/tech/Jaeger-Tracing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Jaeger-Tracing.png -------------------------------------------------------------------------------- /static/skins/tech/OpenTelemetry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/OpenTelemetry.png -------------------------------------------------------------------------------- /static/skins/tech/Photon-Engine-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Photon-Engine-.png -------------------------------------------------------------------------------- /static/skins/tech/Python-Poetry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Python-Poetry.png -------------------------------------------------------------------------------- /static/skins/tech/Read-the-Docs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Read-the-Docs.png -------------------------------------------------------------------------------- /static/skins/tech/Ruby-on-Rails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Ruby-on-Rails.png -------------------------------------------------------------------------------- /static/skins/tech/SQL-Developer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/SQL-Developer.png -------------------------------------------------------------------------------- /static/skins/tech/Sema-Software.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Sema-Software.png -------------------------------------------------------------------------------- /static/skins/tech/Stack-Overflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Stack-Overflow.png -------------------------------------------------------------------------------- /static/skins/tech/The-Algorithms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/The-Algorithms.png -------------------------------------------------------------------------------- /static/skins/tech/Traefik-Proxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Traefik-Proxy.png -------------------------------------------------------------------------------- /static/skins/tech/Unreal-Engine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Unreal-Engine.png -------------------------------------------------------------------------------- /static/skins/tech/Visual-Studio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Visual-Studio.png -------------------------------------------------------------------------------- /static/skins/tech/Vue-Storefront.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Vue-Storefront.png -------------------------------------------------------------------------------- /static/skins/tech/Yii-Framework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Yii-Framework.png -------------------------------------------------------------------------------- /static/skins/tech/Zend-Framework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Zend-Framework.png -------------------------------------------------------------------------------- /apps/website/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | const config = { 2 | plugins: ["@tailwindcss/postcss"], 3 | }; 4 | 5 | export default config; 6 | -------------------------------------------------------------------------------- /apps/website/public/assets/setup1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/apps/website/public/assets/setup1.png -------------------------------------------------------------------------------- /apps/website/public/assets/setup2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/apps/website/public/assets/setup2.png -------------------------------------------------------------------------------- /apps/website/public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/apps/website/public/favicon-16x16.png -------------------------------------------------------------------------------- /apps/website/public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/apps/website/public/favicon-32x32.png -------------------------------------------------------------------------------- /static/skins/dudes/duck_evil/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/dudes/duck_evil/sprite.png -------------------------------------------------------------------------------- /static/skins/tech/Adobe-Illustrator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Adobe-Illustrator.png -------------------------------------------------------------------------------- /static/skins/tech/Adobe-Photoshop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Adobe-Photoshop.png -------------------------------------------------------------------------------- /static/skins/tech/Apache-Cassandra.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Apache-Cassandra.png -------------------------------------------------------------------------------- /static/skins/tech/Apache-Subversion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Apache-Subversion.png -------------------------------------------------------------------------------- /static/skins/tech/Autodesk-ShotGrid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Autodesk-ShotGrid.png -------------------------------------------------------------------------------- /static/skins/tech/Eleventy-(11ty).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Eleventy-(11ty).png -------------------------------------------------------------------------------- /static/skins/tech/GitHub-Codespaces.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/GitHub-Codespaces.png -------------------------------------------------------------------------------- /static/skins/tech/HashiCorp-Vagrant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/HashiCorp-Vagrant.png -------------------------------------------------------------------------------- /static/skins/tech/HashiCorp-Vault.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/HashiCorp-Vault.png -------------------------------------------------------------------------------- /static/skins/tech/Phoenix-Framework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Phoenix-Framework.png -------------------------------------------------------------------------------- /static/skins/tech/Protractor-Test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Protractor-Test.png -------------------------------------------------------------------------------- /static/skins/tech/React-Bootstrap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/React-Bootstrap.png -------------------------------------------------------------------------------- /apps/api/src/auth/guards/index.ts: -------------------------------------------------------------------------------- 1 | export { TwitchAuthGuard } from './twitch-auth.guard'; 2 | export { AuthGuard } from './auth.guard'; 3 | -------------------------------------------------------------------------------- /apps/website/public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/apps/website/public/apple-touch-icon.png -------------------------------------------------------------------------------- /static/fonts/Rubik-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/fonts/Rubik-VariableFont_wght.ttf -------------------------------------------------------------------------------- /static/skins/tech/Adobe-Premiere-Pro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Adobe-Premiere-Pro.png -------------------------------------------------------------------------------- /static/skins/tech/Azure-SQL-Database.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Azure-SQL-Database.png -------------------------------------------------------------------------------- /static/skins/tech/Cloudflare-Workers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Cloudflare-Workers.png -------------------------------------------------------------------------------- /static/skins/tech/HashiCorp-Terraform.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/HashiCorp-Terraform.png -------------------------------------------------------------------------------- /static/skins/tech/IBM-SPSS-Statistics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/IBM-SPSS-Statistics.png -------------------------------------------------------------------------------- /static/skins/tech/NW.js-(node-webkit).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/NW.js-(node-webkit).png -------------------------------------------------------------------------------- /apps/api/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /static/skins/tech/Microsoft-SQL-Server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Microsoft-SQL-Server.png -------------------------------------------------------------------------------- /apps/admin/.env.example: -------------------------------------------------------------------------------- 1 | VITE_API_URL=http://localhost/api 2 | VITE_CLIENT_SOCKET_HOST=http://localhost 3 | 4 | VITE_CJS_IGNORE_WARNING=true 5 | -------------------------------------------------------------------------------- /apps/client/.env.example: -------------------------------------------------------------------------------- 1 | VITE_API_URL=http://localhost/api 2 | VITE_CLIENT_SOCKET_HOST=http://localhost 3 | 4 | VITE_CJS_IGNORE_WARNING=true 5 | -------------------------------------------------------------------------------- /apps/website/public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/apps/website/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /apps/website/public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/apps/website/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /apps/website/src/app/page.tsx: -------------------------------------------------------------------------------- 1 | import { Main } from '@/components/Main'; 2 | 3 | export default function Home() { 4 | return
; 5 | } 6 | -------------------------------------------------------------------------------- /static/skins/tech/Adobe-Commerce-(Magneto).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Adobe-Commerce-(Magneto).png -------------------------------------------------------------------------------- /static/fonts/Rubik-Italic-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/fonts/Rubik-Italic-VariableFont_wght.ttf -------------------------------------------------------------------------------- /static/skins/tech/Internet-Explorer-10-(ie10).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Internet-Explorer-10-(ie10).png -------------------------------------------------------------------------------- /static/skins/tech/Robot-Operating-System-(ROS).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Robot-Operating-System-(ROS).png -------------------------------------------------------------------------------- /static/skins/tech/Visual-Studio-Code-(VS-Code).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Visual-Studio-Code-(VS-Code).png -------------------------------------------------------------------------------- /static/skins/tech/Simple-DirectMedia-Layer-(SDL).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Simple-DirectMedia-Layer-(SDL).png -------------------------------------------------------------------------------- /static/skins/tech/Unified-Modelling-Language-(UML).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/Unified-Modelling-Language-(UML).png -------------------------------------------------------------------------------- /apps/api/src/admin/repositories/index.ts: -------------------------------------------------------------------------------- 1 | export * from './user-skin-collection.repository'; 2 | export * from './user-skin.repository'; 3 | export * from './user.repository'; 4 | -------------------------------------------------------------------------------- /packages/database/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@repo/typescript-config/base-nestjs.json", 3 | "include": [ 4 | "**/*.ts", 5 | "tsup.config.ts" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /apps/api/prisma/migrations/migration_lock.toml: -------------------------------------------------------------------------------- 1 | # Please do not edit this file manually 2 | # It should be added in your version-control system (i.e. Git) 3 | provider = "postgresql" -------------------------------------------------------------------------------- /packages/database/prisma/migrations/migration_lock.toml: -------------------------------------------------------------------------------- 1 | # Please do not edit this file manually 2 | # It should be added in your version-control system (i.e. Git) 3 | provider = "postgresql" -------------------------------------------------------------------------------- /static/skins/tech/RedCube's-epic-Compiler-Thingy-programming-(ReCT).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferst/evotars-app/HEAD/static/skins/tech/RedCube's-epic-Compiler-Thingy-programming-(ReCT).png -------------------------------------------------------------------------------- /apps/api/src/constants.ts: -------------------------------------------------------------------------------- 1 | export const TWITCH_PLATFORM_ID = 1; 2 | 3 | export const TWITCH_SCOPE = [ 4 | 'moderator:read:chatters', 5 | 'channel:manage:redemptions', 6 | 'chat:read', 7 | ]; 8 | -------------------------------------------------------------------------------- /apps/client/src/utils/utils.ts: -------------------------------------------------------------------------------- 1 | export const getGuid = () => { 2 | const path = window.location.pathname.split('/'); 3 | const userGuid = path[path.length - 1]; 4 | 5 | return userGuid; 6 | }; 7 | -------------------------------------------------------------------------------- /apps/api/nest-cli.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "assets": [ 4 | { 5 | "include": "../public", 6 | "outDir": "./dist/public" 7 | } 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /apps/api/src/admin/twitch/token-revoked.exception.ts: -------------------------------------------------------------------------------- 1 | export class TokenRevokedException extends Error { 2 | public name = 'TokenRevokedException'; 3 | public message = 'The token has been revoked.'; 4 | } 5 | -------------------------------------------------------------------------------- /packages/types/src/dto/message.ts: -------------------------------------------------------------------------------- 1 | import { UserInfo } from './user'; 2 | 3 | export type MessageEntity = { 4 | userId: string; 5 | message: string; 6 | emotes: string[]; 7 | info: UserInfo; 8 | }; 9 | -------------------------------------------------------------------------------- /apps/api/src/admin/controllers/index.ts: -------------------------------------------------------------------------------- 1 | export { UserController } from './user.controller'; 2 | export { CommandController } from './command.controller'; 3 | export { SpriteController } from './sprite.controller'; 4 | -------------------------------------------------------------------------------- /apps/api/src/auth/exceptions/invalid-token.exception.ts: -------------------------------------------------------------------------------- 1 | export class InvalidTokenException extends Error { 2 | public name = 'InvalidTokenException'; 3 | 4 | public message = 'Access token is invalid.'; 5 | } 6 | -------------------------------------------------------------------------------- /apps/website/public/sitemap.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | https://evotars.inferst.com/ 4 | 1.0 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/admin/src/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { type ClassValue, clsx } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) : string { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /apps/website/src/mdx-components.tsx: -------------------------------------------------------------------------------- 1 | import type { MDXComponents } from 'mdx/types'; 2 | 3 | export function useMDXComponents(components: MDXComponents): MDXComponents { 4 | return { 5 | ...components, 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /apps/website/src/utils/index.ts: -------------------------------------------------------------------------------- 1 | import { type ClassValue, clsx } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) : string { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /apps/website/public/yandex_dd1696715a134c06.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Verification: dd1696715a134c06 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/typescript-config/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@repo/typescript-config", 3 | "version": "0.0.0", 4 | "private": true, 5 | "devDependencies": { 6 | "eslint": "9.26.0", 7 | "typescript": "5.8.3" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /apps/api/src/app/controllers/app.controller.ts: -------------------------------------------------------------------------------- 1 | import { Controller, Get } from '@nestjs/common'; 2 | 3 | @Controller() 4 | export class AppController { 5 | @Get('/meta') 6 | public getMeta(): string { 7 | return ''; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /apps/api/src/admin/services/index.ts: -------------------------------------------------------------------------------- 1 | export { ActionService } from './action.service'; 2 | export { ChatMessageService } from './chat-message.service'; 3 | export { SocketService } from './socket.service'; 4 | export { SpriteService } from './sprite.service'; 5 | -------------------------------------------------------------------------------- /apps/admin/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@repo/typescript-config/vite.json", 3 | "include": [ 4 | "src" 5 | ], 6 | "compilerOptions": { 7 | "paths": { 8 | "@/*": [ 9 | "./src/*" 10 | ] 11 | } 12 | }, 13 | } 14 | -------------------------------------------------------------------------------- /apps/api/src/database/seed/skins/dudes.ts: -------------------------------------------------------------------------------- 1 | export const skins = [ 2 | 'agent', 3 | 'cat', 4 | 'duck', 5 | 'duck_evil', 6 | 'dude', 7 | 'girl', 8 | 'nerd', 9 | 'nyan', 10 | 'owl', 11 | 'senior', 12 | 'sith', 13 | 'sponge', 14 | ]; 15 | -------------------------------------------------------------------------------- /packages/database/src/seed/skins/dudes.ts: -------------------------------------------------------------------------------- 1 | export const skins = [ 2 | 'agent', 3 | 'cat', 4 | 'duck', 5 | 'duck_evil', 6 | 'dude', 7 | 'girl', 8 | 'nerd', 9 | 'nyan', 10 | 'owl', 11 | 'senior', 12 | 'sith', 13 | 'sponge', 14 | ]; 15 | -------------------------------------------------------------------------------- /packages/types/src/schema/index.ts: -------------------------------------------------------------------------------- 1 | export * from './action'; 2 | export * from './chatter'; 3 | export * from './command'; 4 | export * from './reward'; 5 | export * from './settings'; 6 | export * from './user-skin'; 7 | export * from './user-skin-collection'; 8 | -------------------------------------------------------------------------------- /apps/website/src/lib/i18n/settings.ts: -------------------------------------------------------------------------------- 1 | export const fallbackLng = 'en'; 2 | export const languages = [fallbackLng, 'ru']; 3 | export const defaultNS = 'translation'; 4 | export const cookieName = 'i18next'; 5 | export const headerName = 'x-i18next-current-language'; 6 | -------------------------------------------------------------------------------- /apps/api/prisma/migrations/20240121195332_add_action_data_command_data/migration.sql: -------------------------------------------------------------------------------- 1 | -- AlterTable 2 | ALTER TABLE "Action" ADD COLUMN "data" JSONB NOT NULL DEFAULT '{}'; 3 | 4 | -- AlterTable 5 | ALTER TABLE "Command" ADD COLUMN "data" JSONB NOT NULL DEFAULT '{}'; 6 | -------------------------------------------------------------------------------- /.devcontainer/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/devcontainers/typescript-node:1-20-bullseye 2 | 3 | RUN apt-get -y update && export DEBIAN_FRONTEND=noninteractive \ 4 | && apt-get -y install git gnupg2 5 | 6 | RUN npm install -g pnpm 7 | 8 | RUN pnpm fetch 9 | 10 | -------------------------------------------------------------------------------- /apps/client/src/style.css: -------------------------------------------------------------------------------- 1 | :root { 2 | margin: 0; 3 | padding: 0; 4 | } 5 | 6 | html { 7 | height: 100%; 8 | } 9 | 10 | body { 11 | margin: 0; 12 | padding: 0; 13 | width: 100%; 14 | height: 100%; 15 | min-height: 100%; 16 | overflow: hidden; 17 | } 18 | -------------------------------------------------------------------------------- /packages/database/prisma/migrations/20240121195332_add_action_data_command_data/migration.sql: -------------------------------------------------------------------------------- 1 | -- AlterTable 2 | ALTER TABLE "Action" ADD COLUMN "data" JSONB NOT NULL DEFAULT '{}'; 3 | 4 | -- AlterTable 5 | ALTER TABLE "Command" ADD COLUMN "data" JSONB NOT NULL DEFAULT '{}'; 6 | -------------------------------------------------------------------------------- /packages/types/src/schema/user-skin.ts: -------------------------------------------------------------------------------- 1 | import { z } from 'zod'; 2 | 3 | export const updateUserSkinDtoSchema = z 4 | .object({ 5 | id: z.number().int().min(1), 6 | isActive: z.boolean().optional(), 7 | isDefault: z.boolean().optional(), 8 | }) 9 | .strict(); 10 | -------------------------------------------------------------------------------- /static/skins/tech/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tech", 3 | "collider": { 4 | "x": 0, 5 | "y": 0, 6 | "w": 512, 7 | "h": 512 8 | }, 9 | "size": { 10 | "w": 512, 11 | "h": 512 12 | }, 13 | "scale": 0.25, 14 | "flip": false, 15 | "colored": [] 16 | } 17 | -------------------------------------------------------------------------------- /apps/client/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@repo/typescript-config/vite.json", 3 | "include": [ 4 | "src" 5 | ], 6 | "compilerOptions": { 7 | "moduleResolution": "node", 8 | "paths": { 9 | "@/*": [ 10 | "./src/*", 11 | ] 12 | } 13 | }, 14 | } 15 | -------------------------------------------------------------------------------- /apps/website/public/site.webmanifest: -------------------------------------------------------------------------------- 1 | {"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} -------------------------------------------------------------------------------- /apps/admin/src/components/common/Loader.tsx: -------------------------------------------------------------------------------- 1 | import { Loader2 } from 'lucide-react'; 2 | 3 | export function Loader() { 4 | return ( 5 |
6 | 7 |
8 | ); 9 | } 10 | -------------------------------------------------------------------------------- /packages/types/src/schema/user-skin-collection.ts: -------------------------------------------------------------------------------- 1 | import { z } from 'zod'; 2 | 3 | export const updateUserSkinCollectionDtoSchema = z 4 | .object({ 5 | id: z.number().int().min(1), 6 | isActive: z.boolean().optional(), 7 | isDefault: z.boolean().optional(), 8 | }) 9 | .strict(); 10 | -------------------------------------------------------------------------------- /packages/types/src/dto/settings.ts: -------------------------------------------------------------------------------- 1 | import { Settings } from '@repo/database'; 2 | import { z } from 'zod'; 3 | import { updateSettingsDtoSchema } from '../schema/settings'; 4 | 5 | export type UpdateSettingsDto = z.infer; 6 | 7 | export type SettingsEntity = Settings['data']; 8 | -------------------------------------------------------------------------------- /static/skins/dudes/cat/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cat", 3 | "collider": { 4 | "x": 8, 5 | "y": 4, 6 | "w": 16, 7 | "h": 21 8 | }, 9 | "size": { 10 | "w": 32, 11 | "h": 32 12 | }, 13 | "scale": 4, 14 | "flip": true, 15 | "colored": [ 16 | "Body" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /static/skins/dudes/duck/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "duck", 3 | "collider": { 4 | "x": 8, 5 | "y": 7, 6 | "w": 16, 7 | "h": 18 8 | }, 9 | "size": { 10 | "w": 32, 11 | "h": 32 12 | }, 13 | "scale": 4, 14 | "flip": true, 15 | "colored": ["Body"] 16 | } 17 | -------------------------------------------------------------------------------- /static/skins/dudes/dude/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dude", 3 | "collider": { 4 | "x": 8, 5 | "y": 7, 6 | "w": 16, 7 | "h": 18 8 | }, 9 | "size": { 10 | "w": 32, 11 | "h": 32 12 | }, 13 | "scale": 4, 14 | "flip": true, 15 | "colored": [ 16 | "Body" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /static/skins/dudes/girl/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "girl", 3 | "collider": { 4 | "x": 8, 5 | "y": 5, 6 | "w": 16, 7 | "h": 20 8 | }, 9 | "size": { 10 | "w": 32, 11 | "h": 32 12 | }, 13 | "scale": 4, 14 | "flip": true, 15 | "colored": [ 16 | "Body" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /static/skins/dudes/nerd/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nerd", 3 | "collider": { 4 | "x": 8, 5 | "y": 7, 6 | "w": 16, 7 | "h": 18 8 | }, 9 | "size": { 10 | "w": 32, 11 | "h": 32 12 | }, 13 | "scale": 4, 14 | "flip": true, 15 | "colored": [ 16 | "Body" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /static/skins/dudes/nyan/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nyan", 3 | "collider": { 4 | "x": 14, 5 | "y": 4, 6 | "w": 16, 7 | "h": 21 8 | }, 9 | "size": { 10 | "w": 32, 11 | "h": 32 12 | }, 13 | "scale": 4, 14 | "flip": true, 15 | "colored": ["Body"] 16 | } 17 | -------------------------------------------------------------------------------- /static/skins/dudes/owl/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "owl", 3 | "collider": { 4 | "x": 8, 5 | "y": 4, 6 | "w": 17, 7 | "h": 21 8 | }, 9 | "size": { 10 | "w": 32, 11 | "h": 32 12 | }, 13 | "scale": 4, 14 | "flip": true, 15 | "colored": ["Body"] 16 | } 17 | -------------------------------------------------------------------------------- /static/skins/dudes/sith/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sith", 3 | "collider": { 4 | "x": 8, 5 | "y": 5, 6 | "w": 16, 7 | "h": 20 8 | }, 9 | "size": { 10 | "w": 32, 11 | "h": 32 12 | }, 13 | "scale": 4, 14 | "flip": true, 15 | "colored": [ 16 | "Body" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /packages/types/src/dto/user.ts: -------------------------------------------------------------------------------- 1 | export type UserEntity = { 2 | userId: number; 3 | guid: string; 4 | displayName: string; 5 | profileImageUrl: string; 6 | previewUrl: string; 7 | }; 8 | 9 | export type UserInfo = { 10 | displayName: string; 11 | sprite: string; 12 | color?: string; 13 | }; 14 | -------------------------------------------------------------------------------- /static/skins/dudes/agent/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "agent", 3 | "collider": { 4 | "x": 8, 5 | "y": 7, 6 | "w": 16, 7 | "h": 18 8 | }, 9 | "size": { 10 | "w": 32, 11 | "h": 32 12 | }, 13 | "scale": 4, 14 | "flip": true, 15 | "colored": [ 16 | "Body" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /static/skins/dudes/senior/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "senior", 3 | "collider": { 4 | "x": 8, 5 | "y": 4, 6 | "w": 16, 7 | "h": 21 8 | }, 9 | "size": { 10 | "w": 32, 11 | "h": 32 12 | }, 13 | "scale": 4, 14 | "flip": true, 15 | "colored": [ 16 | "Body" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /static/skins/dudes/sponge/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sponge", 3 | "collider": { 4 | "x": 8, 5 | "y": 7, 6 | "w": 16, 7 | "h": 18 8 | }, 9 | "size": { 10 | "w": 32, 11 | "h": 32 12 | }, 13 | "scale": 4, 14 | "flip": true, 15 | "colored": [ 16 | "Body" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /apps/client/src/main.ts: -------------------------------------------------------------------------------- 1 | import { app } from './app/app'; 2 | import './style.css'; 3 | 4 | const init = async (): Promise => { 5 | // Hot reload 6 | if (import.meta.hot) { 7 | import.meta.hot.accept(() => { 8 | // 9 | }); 10 | } 11 | 12 | await app.init(); 13 | }; 14 | 15 | init(); 16 | -------------------------------------------------------------------------------- /static/skins/dudes/duck_evil/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "duck_evil", 3 | "collider": { 4 | "x": 8, 5 | "y": 7, 6 | "w": 16, 7 | "h": 18 8 | }, 9 | "size": { 10 | "w": 32, 11 | "h": 32 12 | }, 13 | "scale": 4, 14 | "flip": true, 15 | "colored": ["Body"] 16 | } 17 | -------------------------------------------------------------------------------- /apps/website/public/assets/twitch.svg: -------------------------------------------------------------------------------- 1 | Twitch -------------------------------------------------------------------------------- /packages/types/src/dto/user-skin.ts: -------------------------------------------------------------------------------- 1 | import { z } from 'zod'; 2 | import { updateUserSkinDtoSchema } from '..'; 3 | 4 | export type UserSkinEntity = { 5 | id: number; 6 | name: string; 7 | isActive: boolean; 8 | isDefault: boolean; 9 | }; 10 | 11 | export type UpdateUserSkinDto = z.infer; 12 | -------------------------------------------------------------------------------- /apps/api/src/database/database.module.ts: -------------------------------------------------------------------------------- 1 | import { Global, Module } from '@nestjs/common'; 2 | import { PrismaService } from '@/database/prisma.service'; 3 | 4 | @Global() 5 | @Module({ 6 | exports: [PrismaService], 7 | imports: [], 8 | controllers: [], 9 | providers: [PrismaService], 10 | }) 11 | export class DatabaseModule {} 12 | -------------------------------------------------------------------------------- /apps/admin/src/components/Auth/use-auth.tsx: -------------------------------------------------------------------------------- 1 | import { useContext } from 'react'; 2 | import { AuthContext } from './AuthProvider'; 3 | 4 | export const useAuth = () => { 5 | const ctx = useContext(AuthContext); 6 | if (ctx === undefined) { 7 | throw new Error('AuthContext must be attached.'); 8 | } 9 | 10 | return ctx; 11 | }; 12 | -------------------------------------------------------------------------------- /apps/api/src/database/prisma.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable, OnModuleInit } from '@nestjs/common'; 2 | import { PrismaClient } from '@repo/database'; 3 | 4 | @Injectable() 5 | export class PrismaService extends PrismaClient implements OnModuleInit { 6 | public async onModuleInit(): Promise { 7 | await this.$connect(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /apps/website/next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from 'next'; 2 | import createMDX from '@next/mdx'; 3 | 4 | const nextConfig: NextConfig = { 5 | pageExtensions: ['js', 'jsx', 'md', 'mdx', 'ts', 'tsx'], 6 | output: 'standalone', 7 | }; 8 | 9 | const withMDX = createMDX({ 10 | extension: /\.(md|mdx)$/, 11 | }); 12 | 13 | export default withMDX(nextConfig); 14 | -------------------------------------------------------------------------------- /packages/types/src/dto/index.ts: -------------------------------------------------------------------------------- 1 | export * from './action'; 2 | export * from './chatter'; 3 | export * from './command'; 4 | export * from './message'; 5 | export * from './raid'; 6 | export * from './reward'; 7 | export * from './settings'; 8 | export * from './socket'; 9 | export * from './user'; 10 | export * from './user-skin'; 11 | export * from './user-skin-collection'; 12 | -------------------------------------------------------------------------------- /apps/api/src/instruments.ts: -------------------------------------------------------------------------------- 1 | import * as Sentry from "@sentry/nestjs" 2 | 3 | Sentry.init({ 4 | dsn: "https://f37c4d61c30033a2d67b232af5275255@o4507430774898688.ingest.de.sentry.io/4509684650344529", 5 | 6 | // Setting this option to true will send default PII data to Sentry. 7 | // For example, automatic IP address collection on events 8 | sendDefaultPii: true, 9 | }); 10 | -------------------------------------------------------------------------------- /apps/admin/src/main.tsx: -------------------------------------------------------------------------------- 1 | import { StrictMode } from 'react'; 2 | import * as ReactDOM from 'react-dom/client'; 3 | import './style.css'; 4 | import App from './App'; 5 | 6 | import './i18n'; 7 | 8 | const root = document.getElementById('root'); 9 | 10 | if (root) { 11 | ReactDOM.createRoot(root).render( 12 | 13 | 14 | 15 | ); 16 | } 17 | -------------------------------------------------------------------------------- /packages/eslint-config/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@repo/eslint-config", 3 | "version": "0.0.0", 4 | "main": "index.js", 5 | "type": "module", 6 | "devDependencies": { 7 | "@eslint/js": "9.25.1", 8 | "eslint": "9.26.0", 9 | "eslint-plugin-react": "7.37.5", 10 | "globals": "16.1.0", 11 | "typescript": "5.8.3", 12 | "typescript-eslint": "8.31.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/types/src/dto/user-skin-collection.ts: -------------------------------------------------------------------------------- 1 | import { z } from 'zod'; 2 | import { updateUserSkinCollectionDtoSchema } from '..'; 3 | 4 | export type UserSkinCollectionEntity = { 5 | id: number; 6 | name: string; 7 | isActive: boolean; 8 | isDefault: boolean; 9 | }; 10 | 11 | export type UpdateUserSkinCollectionDto = z.infer< 12 | typeof updateUserSkinCollectionDtoSchema 13 | >; 14 | -------------------------------------------------------------------------------- /apps/api/src/pipes/zod.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Injectable, PipeTransform } from '@nestjs/common'; 2 | import { ZodSchema } from 'zod'; 3 | 4 | // TODO: parse action data with type guard 5 | @Injectable() 6 | export class ZodPipe implements PipeTransform { 7 | constructor(private readonly schema: ZodSchema) {} 8 | 9 | transform(value: T): T { 10 | this.schema.parse(value); 11 | return value; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/types/src/dto/command.ts: -------------------------------------------------------------------------------- 1 | import { z } from 'zod'; 2 | import { 3 | createCommandDtoSchema, 4 | updateCommandDtoSchema 5 | } from '../schema/command'; 6 | import { Command } from '@repo/database'; 7 | 8 | export type UpdateCommandDto = z.infer; 9 | 10 | export type CreateCommandDto = z.infer; 11 | 12 | export type CommandEntity = Command; 13 | -------------------------------------------------------------------------------- /packages/types/src/dto/raid.ts: -------------------------------------------------------------------------------- 1 | import { UserInfo } from './user'; 2 | 3 | export type RaidEntity = { 4 | broadcaster: { 5 | id: string; 6 | info: UserInfo; 7 | }; 8 | viewers: { 9 | count: number; 10 | sprite: string; 11 | }; 12 | }; 13 | 14 | export type RewardRedemptionData = { 15 | rewardId: string; 16 | userId: string; 17 | userDisplayName: string; 18 | input: string; 19 | }; 20 | -------------------------------------------------------------------------------- /apps/client/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Overlay / Evotars 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /apps/admin/src/queries/actions.ts: -------------------------------------------------------------------------------- 1 | import { createQueryKeys } from '@lukemorales/query-key-factory'; 2 | import { api } from '../api/api'; 3 | import { useApiQuery } from '../api/use-api-query'; 4 | 5 | export const actionsKeys = createQueryKeys('actions', { 6 | list: { 7 | queryKey: null, 8 | queryFn: api.getActions, 9 | }, 10 | }); 11 | 12 | export const useActionsQuery = () => 13 | useApiQuery({ 14 | ...actionsKeys.list, 15 | }); 16 | -------------------------------------------------------------------------------- /apps/admin/src/queries/rewards.ts: -------------------------------------------------------------------------------- 1 | import { createQueryKeys } from '@lukemorales/query-key-factory'; 2 | import { api } from '../api/api'; 3 | import { useApiQuery } from '../api/use-api-query'; 4 | 5 | export const rewardsKeys = createQueryKeys('rewards', { 6 | list: { 7 | queryKey: null, 8 | queryFn: api.getRewards, 9 | }, 10 | }); 11 | 12 | export const useRewardsQuery = () => 13 | useApiQuery({ 14 | ...rewardsKeys.list, 15 | }); 16 | -------------------------------------------------------------------------------- /apps/admin/src/queries/chatters.ts: -------------------------------------------------------------------------------- 1 | import { createQueryKeys } from "@lukemorales/query-key-factory"; 2 | import { api } from "../api/api"; 3 | import { useApiQuery } from "../api/use-api-query"; 4 | 5 | export const chattersKeys = createQueryKeys('chatters', { 6 | list: { 7 | queryKey: null, 8 | queryFn: api.getChatters, 9 | }, 10 | }); 11 | 12 | export const useChattersQuery = () => 13 | useApiQuery({ 14 | ...chattersKeys.list, 15 | }); 16 | -------------------------------------------------------------------------------- /apps/admin/src/queries/commands.ts: -------------------------------------------------------------------------------- 1 | import { createQueryKeys } from "@lukemorales/query-key-factory"; 2 | import { api } from "../api/api"; 3 | import { useApiQuery } from "../api/use-api-query"; 4 | 5 | export const commandsKeys = createQueryKeys('commands', { 6 | list: { 7 | queryKey: null, 8 | queryFn: api.getCommands, 9 | }, 10 | }); 11 | 12 | export const useCommandsQuery = () => 13 | useApiQuery({ 14 | ...commandsKeys.list, 15 | }); 16 | -------------------------------------------------------------------------------- /apps/admin/src/queries/settings.ts: -------------------------------------------------------------------------------- 1 | import { createQueryKeys } from '@lukemorales/query-key-factory'; 2 | import { api } from '../api/api'; 3 | import { useApiQuery } from '../api/use-api-query'; 4 | 5 | export const settingsKeys = createQueryKeys('settings', { 6 | list: { 7 | queryKey: null, 8 | queryFn: api.getSettings, 9 | }, 10 | }); 11 | 12 | export const useSettingsQuery = () => 13 | useApiQuery({ 14 | ...settingsKeys.list, 15 | }); 16 | -------------------------------------------------------------------------------- /components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "default", 4 | "rsc": false, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "apps/admin/tailwind.config.js", 8 | "css": "apps/admin/src/style.css", 9 | "baseColor": "zinc", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@app/admin/components", 15 | "utils": "@app/admin/lib/utils" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /packages/types/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@repo/typescript-config/nestjs.json", 3 | "compilerOptions": { 4 | "strictNullChecks": true, 5 | "allowJs": true, 6 | "baseUrl": "src", 7 | "esModuleInterop": true, 8 | "incremental": false, 9 | "outDir": "dist" 10 | }, 11 | "include": [ 12 | "src/**/*.ts" 13 | ], 14 | "exclude": [ 15 | "node_modules", 16 | "test", 17 | "dist", 18 | "**/*spec.ts" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /apps/api/prisma/migrations/20240117143624_add_settings_table/migration.sql: -------------------------------------------------------------------------------- 1 | -- CreateTable 2 | CREATE TABLE "Settings" ( 3 | "id" SERIAL NOT NULL, 4 | "userId" INTEGER NOT NULL, 5 | "data" JSONB NOT NULL DEFAULT '{}', 6 | 7 | CONSTRAINT "Settings_pkey" PRIMARY KEY ("id") 8 | ); 9 | 10 | -- AddForeignKey 11 | ALTER TABLE "Settings" ADD CONSTRAINT "Settings_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; 12 | -------------------------------------------------------------------------------- /apps/api/prisma/migrations/20240411135958_chatter/migration.sql: -------------------------------------------------------------------------------- 1 | -- CreateTable 2 | CREATE TABLE "Chatter" ( 3 | "id" SERIAL NOT NULL, 4 | "userId" INTEGER NOT NULL, 5 | "chatterName" TEXT NOT NULL, 6 | "sprite" TEXT NOT NULL, 7 | 8 | CONSTRAINT "Chatter_pkey" PRIMARY KEY ("id") 9 | ); 10 | 11 | -- AddForeignKey 12 | ALTER TABLE "Chatter" ADD CONSTRAINT "Chatter_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; 13 | -------------------------------------------------------------------------------- /packages/database/prisma/migrations/20240117143624_add_settings_table/migration.sql: -------------------------------------------------------------------------------- 1 | -- CreateTable 2 | CREATE TABLE "Settings" ( 3 | "id" SERIAL NOT NULL, 4 | "userId" INTEGER NOT NULL, 5 | "data" JSONB NOT NULL DEFAULT '{}', 6 | 7 | CONSTRAINT "Settings_pkey" PRIMARY KEY ("id") 8 | ); 9 | 10 | -- AddForeignKey 11 | ALTER TABLE "Settings" ADD CONSTRAINT "Settings_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; 12 | -------------------------------------------------------------------------------- /packages/types/src/dto/chatter.ts: -------------------------------------------------------------------------------- 1 | import { Chatter } from '@repo/database'; 2 | import { z } from 'zod'; 3 | import { createChatterDtoSchema, updateChatterDtoSchema } from '../schema'; 4 | 5 | export type TwitchChatterEntity = { 6 | userId: string; 7 | name: string; 8 | }; 9 | 10 | export type UpdateChatterDto = z.infer; 11 | 12 | export type CreateChatterDto = z.infer; 13 | 14 | export type ChatterEntity = Chatter; 15 | -------------------------------------------------------------------------------- /apps/website/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /packages/database/prisma/migrations/20240411135958_chatter/migration.sql: -------------------------------------------------------------------------------- 1 | -- CreateTable 2 | CREATE TABLE "Chatter" ( 3 | "id" SERIAL NOT NULL, 4 | "userId" INTEGER NOT NULL, 5 | "chatterName" TEXT NOT NULL, 6 | "sprite" TEXT NOT NULL, 7 | 8 | CONSTRAINT "Chatter_pkey" PRIMARY KEY ("id") 9 | ); 10 | 11 | -- AddForeignKey 12 | ALTER TABLE "Chatter" ADD CONSTRAINT "Chatter_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; 13 | -------------------------------------------------------------------------------- /apps/api/src/database/seed/actions/resurrect.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '@repo/database'; 2 | 3 | export async function resurrectActionSeed(prisma: PrismaClient): Promise { 4 | const spriteAction = await prisma.action.upsert({ 5 | where: { name: 'resurrect' }, 6 | update: {}, 7 | create: { 8 | name: 'resurrect', 9 | title: 'Resurrect', 10 | description: 'Resurrect', 11 | }, 12 | }); 13 | 14 | console.log({ 15 | spriteAction, 16 | }); 17 | } 18 | -------------------------------------------------------------------------------- /packages/database/src/seed/actions/resurrect.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '../../client'; 2 | 3 | export async function resurrectActionSeed(prisma: PrismaClient): Promise { 4 | const spriteAction = await prisma.action.upsert({ 5 | where: { name: 'resurrect' }, 6 | update: {}, 7 | create: { 8 | name: 'resurrect', 9 | title: 'Resurrect', 10 | description: 'Resurrect', 11 | }, 12 | }); 13 | 14 | console.log({ 15 | spriteAction, 16 | }); 17 | } 18 | -------------------------------------------------------------------------------- /apps/api/src/admin/exceptions/twitch-http.exception.ts: -------------------------------------------------------------------------------- 1 | import { HttpException } from '@nestjs/common'; 2 | import { HttpStatusCodeError } from '@twurple/api-call'; 3 | 4 | export class TwitchHttpException extends HttpException { 5 | constructor(error: unknown) { 6 | if (error instanceof HttpStatusCodeError) { 7 | const body = JSON.parse(error.body); 8 | super(body['message'], error.statusCode); 9 | } else if (error instanceof Error) { 10 | super(error.message, 500); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /apps/api/src/admin/repositories/skin.repository.ts: -------------------------------------------------------------------------------- 1 | import { PrismaService } from '@/database/prisma.service'; 2 | import { Injectable } from '@nestjs/common'; 3 | import { Skin } from '@repo/database'; 4 | 5 | @Injectable() 6 | export class SkinRepository { 7 | public constructor(private readonly prismaService: PrismaService) {} 8 | 9 | public async getSkins(): Promise { 10 | return this.prismaService.skin.findMany({ 11 | orderBy: { 12 | id: 'asc', 13 | }, 14 | }); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /apps/api/src/auth/guards/twitch-auth.guard.ts: -------------------------------------------------------------------------------- 1 | import { ExecutionContext, Injectable } from '@nestjs/common'; 2 | import { AuthGuard } from '@nestjs/passport'; 3 | 4 | @Injectable() 5 | export class TwitchAuthGuard extends AuthGuard('twitch') { 6 | public async canActivate(context: ExecutionContext): Promise { 7 | const activate = (await super.canActivate(context)) as boolean; 8 | const request = context.switchToHttp().getRequest(); 9 | await super.logIn(request); 10 | return activate; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for more information: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | # https://containers.dev/guide/dependabot 6 | 7 | version: 2 8 | updates: 9 | - package-ecosystem: "devcontainers" 10 | directory: "/" 11 | schedule: 12 | interval: weekly 13 | -------------------------------------------------------------------------------- /apps/api/src/admin/repositories/action.repository.ts: -------------------------------------------------------------------------------- 1 | import { PrismaService } from '@/database/prisma.service'; 2 | import { Injectable } from '@nestjs/common'; 3 | import { Action } from '@repo/database'; 4 | 5 | @Injectable() 6 | export class ActionRepository { 7 | public constructor(private readonly prismaService: PrismaService) {} 8 | 9 | public async getActions(): Promise { 10 | return this.prismaService.action.findMany({ 11 | orderBy: { 12 | id: 'asc', 13 | }, 14 | }); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/eslint-config/index.js: -------------------------------------------------------------------------------- 1 | import eslint from '@eslint/js'; 2 | import react from 'eslint-plugin-react'; 3 | import globals from 'globals'; 4 | import tseslint from 'typescript-eslint'; 5 | 6 | const base = tseslint.config( 7 | eslint.configs.recommended, 8 | tseslint.configs.recommended, 9 | ); 10 | 11 | export default { 12 | base, 13 | react: [ 14 | ...base, 15 | react.configs.flat.recommended, 16 | react.configs.flat['jsx-runtime'], 17 | { languageOptions: { globals: globals.browser } }, 18 | ], 19 | }; 20 | -------------------------------------------------------------------------------- /apps/api/src/filters/zod.filter.ts: -------------------------------------------------------------------------------- 1 | import { ArgumentsHost, Catch, ExceptionFilter } from '@nestjs/common'; 2 | import { ZodError } from 'zod'; 3 | 4 | @Catch(ZodError) 5 | export class ZodFilter implements ExceptionFilter { 6 | catch(exception: T, host: ArgumentsHost): void { 7 | const ctx = host.switchToHttp(); 8 | const response = ctx.getResponse(); 9 | const status = 400; 10 | response.status(status).json({ 11 | errors: exception.errors, 12 | statusCode: status, 13 | }); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /apps/api/.env.example: -------------------------------------------------------------------------------- 1 | HOST=localhost 2 | HOST_URL=http://localhost 3 | ADMIN_URL=http://localhost/admin 4 | CLIENT_URL=http://localhost/client 5 | 6 | # Twitch API creds. 7 | TWITCH_CLIENT_ID=t1xgu9qqxhpsrsk6e7viz8qfoj415z 8 | TWITCH_CLIENT_SECRET=kgkw7qe7dvol1x0q9ytvremljdqgta 9 | TWITCH_WEBHOOK_SECRET=1234567890 10 | TWITCH_CALLBACK_URL=http://localhost:3000/api/auth/callback 11 | 12 | # Session. 13 | SESSION_SECRET=1234567890 14 | 15 | # DB 16 | # Do not setup in devcontainer 17 | DATABASE_URL=postgresql://dudes:dudes@localhost:5432/dudes?schema=public 18 | -------------------------------------------------------------------------------- /apps/api/src/database/seed/actions/add_jump_hits.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '@repo/database'; 2 | 3 | export async function addJumpHitsActionSeed( 4 | prisma: PrismaClient, 5 | ): Promise { 6 | const addJumpHitsAction = await prisma.action.upsert({ 7 | where: { name: 'add_jump_hits' }, 8 | update: {}, 9 | create: { 10 | name: 'add_jump_hits', 11 | title: 'Add Jump Hits', 12 | description: 'Add Jump Hits', 13 | }, 14 | }); 15 | 16 | console.log({ 17 | spriteAction: addJumpHitsAction, 18 | }); 19 | } 20 | -------------------------------------------------------------------------------- /packages/database/src/seed/actions/add_jump_hits.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '../../client'; 2 | 3 | export async function addJumpHitsActionSeed( 4 | prisma: PrismaClient 5 | ): Promise { 6 | const addJumpHitsAction = await prisma.action.upsert({ 7 | where: { name: 'add_jump_hits' }, 8 | update: {}, 9 | create: { 10 | name: 'add_jump_hits', 11 | title: 'Add Jump Hits', 12 | description: 'Add Jump Hits', 13 | }, 14 | }); 15 | 16 | console.log({ 17 | spriteAction: addJumpHitsAction, 18 | }); 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/auth/serializers/auth.serializer.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@nestjs/common'; 2 | import { PassportSerializer } from '@nestjs/passport'; 3 | 4 | @Injectable() 5 | export class AuthSerializer extends PassportSerializer { 6 | public serializeUser( 7 | user: unknown, 8 | done: (err: null, user: unknown) => void, 9 | ): void { 10 | done(null, user); 11 | } 12 | 13 | public deserializeUser( 14 | payload: unknown, 15 | done: (err: null, user: unknown) => void, 16 | ): void { 17 | done(null, payload); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /apps/admin/src/i18n.ts: -------------------------------------------------------------------------------- 1 | import i18n from 'i18next'; 2 | import { initReactI18next } from 'react-i18next'; 3 | 4 | import Backend from 'i18next-http-backend'; 5 | import LanguageDetector from 'i18next-browser-languagedetector'; 6 | 7 | i18n 8 | .use(Backend) 9 | .use(LanguageDetector) 10 | .use(initReactI18next) 11 | .init({ 12 | fallbackLng: 'en', 13 | debug: false, 14 | 15 | backend: { loadPath: '/admin/locales/{{lng}}/{{ns}}.json' }, 16 | 17 | interpolation: { 18 | escapeValue: false, 19 | }, 20 | }); 21 | 22 | export default i18n; 23 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.extend.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | devcontainer: 4 | # Note that the path of the Dockerfile and context is relative to the *primary* 5 | # docker-compose.yml file (the first in the devcontainer.json "dockerComposeFile" 6 | # array). The sample below assumes your primary file is in the root of your project. 7 | build: 8 | context: . 9 | dockerfile: .devcontainer/Dockerfile 10 | volumes: 11 | - dudes:/workspaces 12 | command: /bin/sh -c "while sleep 1000; do :; done" 13 | 14 | volumes: 15 | dudes: 16 | -------------------------------------------------------------------------------- /apps/api/src/admin/repositories/skin-collection.repository.ts: -------------------------------------------------------------------------------- 1 | import { PrismaService } from '@/database/prisma.service'; 2 | import { Injectable } from '@nestjs/common'; 3 | import { SkinCollection } from '@repo/database'; 4 | 5 | @Injectable() 6 | export class SkinCollectionRepository { 7 | public constructor(private readonly prismaService: PrismaService) {} 8 | 9 | public async getSkinCollections(): Promise { 10 | return this.prismaService.skinCollection.findMany({ 11 | orderBy: { 12 | id: 'asc', 13 | }, 14 | }); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/types/src/dto/reward.ts: -------------------------------------------------------------------------------- 1 | import { Reward } from '@repo/database'; 2 | import { z } from 'zod'; 3 | import { createTwitchRewardDtoSchema, updateTwitchRewardDtoSchema } from '../schema/reward'; 4 | 5 | export type UpdateTwitchRewardDto = z.infer; 6 | 7 | export type CreateTwitchRewardDto = z.infer; 8 | 9 | export type RewardEntity = Reward; 10 | 11 | export type TwitchRewardEntity = { 12 | title?: string; 13 | cost?: number; 14 | isDeleted: boolean; 15 | isActive: boolean; 16 | } & RewardEntity; 17 | -------------------------------------------------------------------------------- /packages/typescript-config/vite.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./base.json", 3 | "compilerOptions": { 4 | "target": "ESNext", 5 | "useDefineForClassFields": true, 6 | "module": "ESNext", 7 | "lib": [ 8 | "ESNext", 9 | "DOM" 10 | ], 11 | "sourceMap": true, 12 | "resolveJsonModule": true, 13 | "noEmit": true, 14 | "noUnusedLocals": true, 15 | "noUnusedParameters": true, 16 | "noImplicitReturns": true, 17 | "jsx": "preserve", 18 | "allowImportingTsExtensions": true 19 | }, 20 | "exclude": [ 21 | "node_modules" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /apps/api/src/admin/controllers/action.controller.ts: -------------------------------------------------------------------------------- 1 | import { AuthGuard } from '@/auth/guards'; 2 | import { Controller, Get, UseGuards } from '@nestjs/common'; 3 | import { ActionEntity } from '@repo/types'; 4 | import { ActionRepository } from '../repositories/action.repository'; 5 | 6 | @Controller('/action') 7 | export class ActionController { 8 | public constructor(private readonly actionRepository: ActionRepository) {} 9 | 10 | @Get('/list') 11 | @UseGuards(AuthGuard) 12 | public async getActions(): Promise { 13 | return this.actionRepository.getActions(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /apps/api/src/auth/repositories/user.repository.ts: -------------------------------------------------------------------------------- 1 | import { PrismaService } from '@/database/prisma.service'; 2 | import { Injectable } from '@nestjs/common'; 3 | import { User } from '@repo/database'; 4 | 5 | @Injectable() 6 | export class UserRepository { 7 | public constructor(private readonly prismaService: PrismaService) {} 8 | 9 | public async getByIdOrCreate(id: number): Promise { 10 | const user = await this.prismaService.user.upsert({ 11 | where: { 12 | id, 13 | }, 14 | update: {}, 15 | create: {}, 16 | }); 17 | 18 | return user; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /packages/typescript-config/base-nestjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "compilerOptions": { 4 | "declaration": true, 5 | "declarationMap": true, 6 | "esModuleInterop": true, 7 | "incremental": false, 8 | "isolatedModules": true, 9 | "lib": ["es2022", "DOM", "DOM.Iterable"], 10 | "module": "NodeNext", 11 | "moduleDetection": "force", 12 | "moduleResolution": "NodeNext", 13 | "noUncheckedIndexedAccess": true, 14 | "resolveJsonModule": true, 15 | "skipLibCheck": true, 16 | "strict": true, 17 | "target": "ES2022" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /apps/api/src/admin/services/chat-message.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@nestjs/common'; 2 | 3 | @Injectable() 4 | export class ChatMessageService { 5 | public isUserCommand(message: string): boolean { 6 | return message.startsWith('!'); 7 | } 8 | 9 | public stripEmotes(message: string, emotes: string[]): string { 10 | return message 11 | .split(' ') 12 | .filter((word) => !emotes.includes(word)) 13 | .join(' '); 14 | } 15 | 16 | public formatMessage(message: string): string { 17 | if (this.isUserCommand(message)) { 18 | return ''; 19 | } 20 | 21 | return message.trim(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /apps/client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite --clearScreen false", 8 | "build": "tsc && vite build", 9 | "preview": "vite preview", 10 | "lint": "tsc --noEmit" 11 | }, 12 | "dependencies": { 13 | "@repo/eslint-config": "workspace:*", 14 | "@repo/types": "workspace:*", 15 | "@repo/typescript-config": "workspace:*", 16 | "evotars": "0.0.20", 17 | "socket.io-client": "4.8.1", 18 | "vite": "6.3.5" 19 | }, 20 | "devDependencies": { 21 | "eslint": "9.26.0", 22 | "typescript": "5.8.3" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /packages/typescript-config/base.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "compilerOptions": { 4 | "composite": false, 5 | "declaration": true, 6 | "declarationMap": true, 7 | "esModuleInterop": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "inlineSources": false, 10 | "isolatedModules": true, 11 | "module": "ESNext", 12 | "moduleResolution": "Bundler", 13 | "noUnusedLocals": false, 14 | "noUnusedParameters": false, 15 | "preserveWatchOutput": true, 16 | "skipLibCheck": true, 17 | "strict": true 18 | }, 19 | "exclude": [ 20 | "node_modules" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /apps/website/src/components/Card.tsx: -------------------------------------------------------------------------------- 1 | import { JSX } from 'react'; 2 | 3 | type CardProps = { 4 | icon: JSX.Element; 5 | title: string; 6 | description: string; 7 | }; 8 | 9 | export const Card = (props: CardProps) => { 10 | return ( 11 | <> 12 |
13 |
14 | {props.icon} 15 |
16 |
{props.title}
17 |
{props.description}
18 |
19 | 20 | ); 21 | }; 22 | -------------------------------------------------------------------------------- /packages/types/src/dto/socket.ts: -------------------------------------------------------------------------------- 1 | import { UserActionEntity } from './action'; 2 | import { TwitchChatterEntity } from './chatter'; 3 | import { RaidEntity } from './raid'; 4 | import { MessageEntity } from './message'; 5 | import { SettingsEntity } from './settings'; 6 | 7 | export type ServerToClientsEvents = { 8 | message: (data: MessageEntity) => void; 9 | settings: (data: SettingsEntity) => void; 10 | chatters: (data: TwitchChatterEntity[]) => void; 11 | action: (data: UserActionEntity) => void; 12 | raid: (data: RaidEntity) => void; 13 | }; 14 | 15 | export interface ClientToServerEvents { 16 | initialize: (data: { roomId: string }) => void; 17 | } 18 | -------------------------------------------------------------------------------- /packages/database/src/seed/seed.ts: -------------------------------------------------------------------------------- 1 | import { actionSeed } from './actions'; 2 | import { dudesSkinCollectionSeed } from './skins'; 3 | 4 | import { prisma } from '../client'; 5 | 6 | async function main(): Promise { 7 | await actionSeed(prisma); 8 | await dudesSkinCollectionSeed(prisma); 9 | 10 | await prisma.platform.upsert({ 11 | where: { id: 1 }, 12 | update: {}, 13 | create: { 14 | name: 'twitch', 15 | }, 16 | }); 17 | } 18 | 19 | main() 20 | .then(async () => { 21 | await prisma.$disconnect(); 22 | }) 23 | .catch(async (e) => { 24 | console.error(e); 25 | await prisma.$disconnect(); 26 | process.exit(1); 27 | }); 28 | -------------------------------------------------------------------------------- /apps/website/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.* 7 | .yarn/* 8 | !.yarn/patches 9 | !.yarn/plugins 10 | !.yarn/releases 11 | !.yarn/versions 12 | 13 | # testing 14 | /coverage 15 | 16 | # next.js 17 | /.next/ 18 | /out/ 19 | 20 | # production 21 | /build 22 | 23 | # misc 24 | .DS_Store 25 | *.pem 26 | 27 | # debug 28 | npm-debug.log* 29 | yarn-debug.log* 30 | yarn-error.log* 31 | .pnpm-debug.log* 32 | 33 | # env files (can opt-in for committing if needed) 34 | .env* 35 | 36 | # vercel 37 | .vercel 38 | 39 | # typescript 40 | *.tsbuildinfo 41 | next-env.d.ts 42 | -------------------------------------------------------------------------------- /compose.dev.yaml: -------------------------------------------------------------------------------- 1 | services: 2 | 3 | postgres: 4 | image: postgres:15-alpine 5 | container_name: evotars-postgres 6 | ports: 7 | - 5432:5432 8 | volumes: 9 | - postgres-data:/var/lib/postgresql/data 10 | environment: 11 | - POSTGRES_PASSWORD=dudes 12 | - POSTGRES_USER=dudes 13 | - POSTGRES_DB=dudes 14 | restart: unless-stopped 15 | 16 | nginx: 17 | image: nginx:alpine 18 | container_name: evotars-nginx 19 | ports: 20 | - 80:80 21 | volumes: 22 | - ./nginx/dev.conf:/etc/nginx/conf.d/default.conf 23 | - ./static:/var/www/html 24 | restart: unless-stopped 25 | 26 | volumes: 27 | postgres-data: 28 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "evotars-app", 3 | "version": "0.0.0", 4 | "license": "MIT", 5 | "scripts": { 6 | "dev": "turbo dev", 7 | "build": "turbo build", 8 | "lint": "turbo lint", 9 | "db:migrate:dev": "turbo db:migrate:dev", 10 | "db:migrate:deploy": "turbo db:migrate:deploy", 11 | "db:seed": "turbo db:seed" 12 | }, 13 | "prisma": { 14 | "seed": "ts-node --compiler-options {\"module\":\"CommonJS\"} apps/api/src/database/seed/seed.ts" 15 | }, 16 | "devDependencies": { 17 | "turbo": "2.5.3", 18 | "typescript": "5.8.3" 19 | }, 20 | "pnpm": { 21 | "neverBuiltDependencies": [] 22 | }, 23 | "packageManager": "pnpm@10.10.0" 24 | } 25 | -------------------------------------------------------------------------------- /apps/api/src/auth/decorators/auth.decorator.ts: -------------------------------------------------------------------------------- 1 | import { createParamDecorator, ExecutionContext } from '@nestjs/common'; 2 | import { RuntimeException } from '@nestjs/core/errors/exceptions/runtime.exception'; 3 | import { AuthUserProps } from '@/auth/services/auth.service'; 4 | 5 | export const factory = (_: unknown, ctx: ExecutionContext): AuthUserProps => { 6 | const request = ctx.switchToHttp().getRequest(); 7 | 8 | if (!request?.user) { 9 | throw new RuntimeException( 10 | 'User object is not found in the request. Possibly you forgot to add Auth guard', 11 | ); 12 | } 13 | 14 | return request.user; 15 | }; 16 | 17 | export const Auth = createParamDecorator(factory); 18 | -------------------------------------------------------------------------------- /packages/typescript-config/nestjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "./base-nestjs.json", 4 | "compilerOptions": { 5 | "allowSyntheticDefaultImports": true, 6 | "emitDecoratorMetadata": true, 7 | "experimentalDecorators": true, 8 | "forceConsistentCasingInFileNames": false, 9 | "incremental": true, 10 | "module": "commonjs", 11 | "moduleResolution": "Node10", 12 | "noFallthroughCasesInSwitch": false, 13 | "noImplicitAny": false, 14 | "removeComments": true, 15 | "skipLibCheck": true, 16 | "sourceMap": true, 17 | "strictNullChecks": false, 18 | "strictBindCallApply": false 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /apps/admin/src/components/Layout/Layout.tsx: -------------------------------------------------------------------------------- 1 | import { Outlet } from 'react-router'; 2 | import { Header } from './Header'; 3 | import { Sidebar } from './Sidebar'; 4 | import { AuthProvider } from '../Auth/AuthProvider'; 5 | import { Footer } from './Footer'; 6 | 7 | export function Layout() { 8 | return ( 9 | 10 |
11 |
12 |
13 | 14 |
15 | 16 |
17 |
18 |
19 |
20 |
21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /apps/client/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { fileURLToPath } from 'node:url'; 2 | import { defineConfig } from 'vite'; 3 | 4 | export default defineConfig({ 5 | root: __dirname, 6 | base: '/client', 7 | 8 | server: { 9 | port: 4300, 10 | host: true, 11 | }, 12 | 13 | // logLevel: 'warn', 14 | // 15 | // preview: { 16 | // port: 4300, 17 | // host: 'localhost', 18 | // }, 19 | 20 | build: { 21 | // outDir: './dist/apps/client', 22 | reportCompressedSize: true, 23 | commonjsOptions: { 24 | transformMixedEsModules: true, 25 | }, 26 | }, 27 | 28 | resolve: { 29 | alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) }, 30 | }, 31 | }); 32 | -------------------------------------------------------------------------------- /apps/api/src/database/seed/actions/color.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '@repo/database'; 2 | import { defaultColorCommandSeed } from '../commands/color'; 3 | 4 | export async function colorActionSeed(prisma: PrismaClient): Promise { 5 | const colorAction = await prisma.action.upsert({ 6 | where: { name: 'color' }, 7 | update: {}, 8 | create: { 9 | name: 'color', 10 | title: 'Color', 11 | description: 'Color', 12 | }, 13 | }); 14 | 15 | const users = await prisma.user.findMany(); 16 | 17 | for (const user of users) { 18 | await defaultColorCommandSeed(prisma, user, colorAction); 19 | } 20 | 21 | console.log({ 22 | colorAction, 23 | }); 24 | } 25 | -------------------------------------------------------------------------------- /packages/database/src/seed/actions/color.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '../../client'; 2 | import { defaultColorCommandSeed } from '../commands/color'; 3 | 4 | export async function colorActionSeed(prisma: PrismaClient): Promise { 5 | const colorAction = await prisma.action.upsert({ 6 | where: { name: 'color' }, 7 | update: {}, 8 | create: { 9 | name: 'color', 10 | title: 'Color', 11 | description: 'Color', 12 | }, 13 | }); 14 | 15 | const users = await prisma.user.findMany(); 16 | 17 | for (const user of users) { 18 | await defaultColorCommandSeed(prisma, user, colorAction); 19 | } 20 | 21 | console.log({ 22 | colorAction, 23 | }); 24 | } 25 | -------------------------------------------------------------------------------- /apps/api/src/database/seed/actions/sprite.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '@repo/database'; 2 | import { defaultSpriteCommandSeed } from '../commands/sprite'; 3 | 4 | export async function spriteActionSeed(prisma: PrismaClient): Promise { 5 | const spriteAction = await prisma.action.upsert({ 6 | where: { name: 'sprite' }, 7 | update: {}, 8 | create: { 9 | name: 'sprite', 10 | title: 'Sprite', 11 | description: 'Sprite', 12 | }, 13 | }); 14 | 15 | const users = await prisma.user.findMany(); 16 | 17 | for (const user of users) { 18 | await defaultSpriteCommandSeed(prisma, user, spriteAction); 19 | } 20 | 21 | console.log({ 22 | spriteAction, 23 | }); 24 | } 25 | -------------------------------------------------------------------------------- /packages/database/src/seed/actions/sprite.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '../../client'; 2 | import { defaultSpriteCommandSeed } from '../commands/sprite'; 3 | 4 | export async function spriteActionSeed(prisma: PrismaClient): Promise { 5 | const spriteAction = await prisma.action.upsert({ 6 | where: { name: 'sprite' }, 7 | update: {}, 8 | create: { 9 | name: 'sprite', 10 | title: 'Sprite', 11 | description: 'Sprite', 12 | }, 13 | }); 14 | 15 | const users = await prisma.user.findMany(); 16 | 17 | for (const user of users) { 18 | await defaultSpriteCommandSeed(prisma, user, spriteAction); 19 | } 20 | 21 | console.log({ 22 | spriteAction, 23 | }); 24 | } 25 | -------------------------------------------------------------------------------- /packages/types/src/schema/chatter.ts: -------------------------------------------------------------------------------- 1 | import { z } from 'zod'; 2 | 3 | const id = z.number().int().min(1); 4 | 5 | const chatterId = z.string().min(1).max(255); 6 | 7 | const sprite = z.string().min(1).max(255); 8 | 9 | export const updateChatterDtoSchema = z 10 | .object({ 11 | id, 12 | chatterId: chatterId, 13 | sprite: sprite, 14 | }) 15 | .strict(); 16 | 17 | export const createChatterDtoSchema = z 18 | .object({ 19 | chatterId: chatterId, 20 | sprite: sprite, 21 | }) 22 | .strict(); 23 | 24 | export const createChatterFormSchema = z.object({ 25 | chatterId: chatterId, 26 | sprite: sprite, 27 | }); 28 | 29 | export type CreateChatterForm = z.infer; 30 | -------------------------------------------------------------------------------- /apps/api/src/database/seed/skins/index.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '@repo/database'; 2 | import { defaultUserSkinCollection, skinCollectionSeed } from './collection'; 3 | import { skins } from './dudes'; 4 | import { defaultUserSkins, skinSeed } from './skin'; 5 | 6 | export async function dudesSkinCollectionSeed( 7 | prisma: PrismaClient, 8 | ): Promise { 9 | const collection = await skinCollectionSeed(prisma, 'dudes'); 10 | 11 | for (const name of skins) { 12 | skinSeed(prisma, name, collection); 13 | } 14 | 15 | const users = await prisma.user.findMany(); 16 | 17 | for (const user of users) { 18 | await defaultUserSkinCollection(prisma, user.id); 19 | await defaultUserSkins(prisma, user.id); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/database/src/seed/commands/index.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient, User } from '../../client'; 2 | import { defaultColorCommandSeed } from './color'; 3 | import { defaultDashCommandSeed } from './dash'; 4 | import { defaultGrowCommandSeed } from './grow'; 5 | import { defaultJumpCommandSeed } from './jump'; 6 | import { defaultSpriteCommandSeed } from './sprite'; 7 | 8 | export const defaultCommandsSeed = async ( 9 | prisma: PrismaClient, 10 | user: User 11 | ): Promise => { 12 | await defaultJumpCommandSeed(prisma, user); 13 | await defaultColorCommandSeed(prisma, user); 14 | await defaultGrowCommandSeed(prisma, user); 15 | await defaultDashCommandSeed(prisma, user); 16 | await defaultSpriteCommandSeed(prisma, user); 17 | }; 18 | -------------------------------------------------------------------------------- /packages/database/src/seed/skins/index.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '../../client'; 2 | import { defaultUserSkinCollection, skinCollectionSeed } from './collection'; 3 | import { skins } from './dudes'; 4 | import { defaultUserSkins, skinSeed } from './skin'; 5 | 6 | export async function dudesSkinCollectionSeed( 7 | prisma: PrismaClient, 8 | ): Promise { 9 | const collection = await skinCollectionSeed(prisma, 'dudes'); 10 | 11 | for (const name of skins) { 12 | skinSeed(prisma, name, collection); 13 | } 14 | 15 | const users = await prisma.user.findMany(); 16 | 17 | for (const user of users) { 18 | await defaultUserSkinCollection(prisma, user.id); 19 | await defaultUserSkins(prisma, user.id); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /apps/api/src/database/seed/commands/index.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient, User } from '@repo/database'; 2 | import { defaultJumpCommandSeed } from './jump'; 3 | import { defaultColorCommandSeed } from './color'; 4 | import { defaultGrowCommandSeed } from './grow'; 5 | import { defaultDashCommandSeed } from './dash'; 6 | import { defaultSpriteCommandSeed } from './sprite'; 7 | 8 | export const defaultCommandsSeed = async ( 9 | prisma: PrismaClient, 10 | user: User, 11 | ): Promise => { 12 | await defaultJumpCommandSeed(prisma, user); 13 | await defaultColorCommandSeed(prisma, user); 14 | await defaultGrowCommandSeed(prisma, user); 15 | await defaultDashCommandSeed(prisma, user); 16 | await defaultSpriteCommandSeed(prisma, user); 17 | }; 18 | -------------------------------------------------------------------------------- /apps/api/src/admin/controllers/user.controller.ts: -------------------------------------------------------------------------------- 1 | import { Auth } from '@/auth/decorators'; 2 | import { AuthGuard } from '@/auth/guards'; 3 | import { AuthUserProps } from '@/auth/services/auth.service'; 4 | import { ConfigService } from '@/config/config.service'; 5 | import { Controller, Get, UseGuards } from '@nestjs/common'; 6 | import { UserEntity } from '@repo/types'; 7 | 8 | @Controller('/user') 9 | export class UserController { 10 | public constructor(private readonly configService: ConfigService) {} 11 | 12 | @Get('/') 13 | @UseGuards(AuthGuard) 14 | public getUser(@Auth() user: AuthUserProps): UserEntity { 15 | return { 16 | ...user, 17 | previewUrl: `${this.configService.clientUrl}/${user.guid}`, 18 | }; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /apps/admin/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Admin / Evotars 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /apps/website/src/lib/i18n/index.ts: -------------------------------------------------------------------------------- 1 | import i18next from './i18next'; 2 | import { headerName } from './settings'; 3 | import { headers } from 'next/headers'; 4 | 5 | export async function getT(ns?: string, options?: { keyPrefix: string }) { 6 | const headerList = await headers(); 7 | const lng = headerList.get(headerName); 8 | 9 | if (lng && i18next.resolvedLanguage !== lng) { 10 | await i18next.changeLanguage(lng); 11 | } 12 | 13 | if (ns && !i18next.hasLoadedNamespace(ns)) { 14 | await i18next.loadNamespaces(ns); 15 | } 16 | 17 | return { 18 | t: i18next.getFixedT( 19 | lng ?? i18next.resolvedLanguage ?? '', 20 | Array.isArray(ns) ? ns[0] : ns, 21 | options?.keyPrefix, 22 | ), 23 | i18n: i18next, 24 | }; 25 | } 26 | -------------------------------------------------------------------------------- /packages/database/src/seed/actions/dash.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '../../client'; 2 | import { defaultDashCommandSeed } from '../commands/dash'; 3 | 4 | export async function dashActionSeed(prisma: PrismaClient): Promise { 5 | const dashAction = await prisma.action.upsert({ 6 | where: { name: 'dash' }, 7 | update: {}, 8 | create: { 9 | name: 'dash', 10 | title: 'Dash', 11 | description: 'Dash', 12 | }, 13 | }); 14 | 15 | // Create non existing command based on actions for each user 16 | 17 | const users = await prisma.user.findMany(); 18 | 19 | for (const user of users) { 20 | await defaultDashCommandSeed(prisma, user, dashAction); 21 | } 22 | 23 | console.log({ 24 | dashAction, 25 | }); 26 | } 27 | -------------------------------------------------------------------------------- /packages/database/src/seed/actions/grow.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '../../client'; 2 | import { defaultGrowCommandSeed } from '../commands/grow'; 3 | 4 | export async function growActionSeed(prisma: PrismaClient): Promise { 5 | const growAction = await prisma.action.upsert({ 6 | where: { name: 'grow' }, 7 | update: {}, 8 | create: { 9 | name: 'grow', 10 | title: 'Grow', 11 | description: 'Grow', 12 | }, 13 | }); 14 | 15 | // Create non existing command based on actions for each user 16 | 17 | const users = await prisma.user.findMany(); 18 | 19 | for (const user of users) { 20 | await defaultGrowCommandSeed(prisma, user, growAction); 21 | } 22 | 23 | console.log({ 24 | growAction, 25 | }); 26 | } 27 | -------------------------------------------------------------------------------- /packages/database/src/seed/actions/jump.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '../../client'; 2 | import { defaultJumpCommandSeed } from '../commands/jump'; 3 | 4 | export async function jumpActionSeed(prisma: PrismaClient): Promise { 5 | const jumpAction = await prisma.action.upsert({ 6 | where: { name: 'jump' }, 7 | update: {}, 8 | create: { 9 | name: 'jump', 10 | title: 'Jump', 11 | description: 'Jump', 12 | }, 13 | }); 14 | 15 | // Create non existing command based on actions for each user 16 | 17 | const users = await prisma.user.findMany(); 18 | 19 | for (const user of users) { 20 | await defaultJumpCommandSeed(prisma, user, jumpAction); 21 | } 22 | 23 | console.log({ 24 | jumpAction, 25 | }); 26 | } 27 | -------------------------------------------------------------------------------- /apps/api/src/admin/filters/twitch-http-exception.filter.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ArgumentsHost, 3 | Catch, 4 | ExceptionFilter, 5 | HttpException, 6 | } from '@nestjs/common'; 7 | import { Response } from 'express'; 8 | import { TwitchHttpException } from '../exceptions/twitch-http.exception'; 9 | 10 | @Catch(TwitchHttpException) 11 | export class TwitchHttpExceptionFilter implements ExceptionFilter { 12 | catch(exception: HttpException, host: ArgumentsHost) { 13 | const ctx = host.switchToHttp(); 14 | const response = ctx.getResponse(); 15 | const status = exception.getStatus(); 16 | 17 | response.status(status).json({ 18 | message: exception.message, 19 | statusCode: status, 20 | type: 'twitch', 21 | }); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /apps/api/src/database/seed/actions/dash.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '@repo/database'; 2 | import { defaultDashCommandSeed } from '../commands/dash'; 3 | 4 | export async function dashActionSeed(prisma: PrismaClient): Promise { 5 | const dashAction = await prisma.action.upsert({ 6 | where: { name: 'dash' }, 7 | update: {}, 8 | create: { 9 | name: 'dash', 10 | title: 'Dash', 11 | description: 'Dash', 12 | }, 13 | }); 14 | 15 | // Create non existing command based on actions for each user 16 | 17 | const users = await prisma.user.findMany(); 18 | 19 | for (const user of users) { 20 | await defaultDashCommandSeed(prisma, user, dashAction); 21 | } 22 | 23 | console.log({ 24 | dashAction, 25 | }); 26 | } 27 | -------------------------------------------------------------------------------- /apps/api/src/database/seed/actions/grow.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '@repo/database'; 2 | import { defaultGrowCommandSeed } from '../commands/grow'; 3 | 4 | export async function growActionSeed(prisma: PrismaClient): Promise { 5 | const growAction = await prisma.action.upsert({ 6 | where: { name: 'grow' }, 7 | update: {}, 8 | create: { 9 | name: 'grow', 10 | title: 'Grow', 11 | description: 'Grow', 12 | }, 13 | }); 14 | 15 | // Create non existing command based on actions for each user 16 | 17 | const users = await prisma.user.findMany(); 18 | 19 | for (const user of users) { 20 | await defaultGrowCommandSeed(prisma, user, growAction); 21 | } 22 | 23 | console.log({ 24 | growAction, 25 | }); 26 | } 27 | -------------------------------------------------------------------------------- /apps/api/src/database/seed/actions/jump.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '@repo/database'; 2 | import { defaultJumpCommandSeed } from '../commands/jump'; 3 | 4 | export async function jumpActionSeed(prisma: PrismaClient): Promise { 5 | const jumpAction = await prisma.action.upsert({ 6 | where: { name: 'jump' }, 7 | update: {}, 8 | create: { 9 | name: 'jump', 10 | title: 'Jump', 11 | description: 'Jump', 12 | }, 13 | }); 14 | 15 | // Create non existing command based on actions for each user 16 | 17 | const users = await prisma.user.findMany(); 18 | 19 | for (const user of users) { 20 | await defaultJumpCommandSeed(prisma, user, jumpAction); 21 | } 22 | 23 | console.log({ 24 | jumpAction, 25 | }); 26 | } 27 | -------------------------------------------------------------------------------- /apps/api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "CommonJS", 4 | "declaration": true, 5 | "removeComments": true, 6 | "emitDecoratorMetadata": true, 7 | "experimentalDecorators": true, 8 | "allowSyntheticDefaultImports": true, 9 | "target": "ES2021", 10 | "sourceMap": true, 11 | "outDir": "./dist", 12 | "baseUrl": "./", 13 | "incremental": true, 14 | "skipLibCheck": true, 15 | "strictNullChecks": true, 16 | "forceConsistentCasingInFileNames": true, 17 | "noImplicitAny": false, 18 | "strictBindCallApply": false, 19 | "noFallthroughCasesInSwitch": false, 20 | "esModuleInterop": true, 21 | "paths": { 22 | "@/*": [ 23 | "./src/*" 24 | ] 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /apps/website/src/app/terms/layout.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from '@/utils'; 2 | 3 | export default function MdxLayout({ children }: { children: React.ReactNode }) { 4 | return ( 5 |
24 | {children} 25 |
26 | ); 27 | } 28 | -------------------------------------------------------------------------------- /apps/website/src/app/privacy/layout.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from '@/utils'; 2 | 3 | export default function MdxLayout({ children }: { children: React.ReactNode }) { 4 | return ( 5 |
24 | {children} 25 |
26 | ); 27 | } 28 | -------------------------------------------------------------------------------- /packages/types/src/schema/settings.ts: -------------------------------------------------------------------------------- 1 | import { z } from 'zod'; 2 | import { UpdateSettingsDto } from '../dto/settings'; 3 | 4 | export const updateSettingsDtoSchema = z.object({ 5 | showAnonymousEvotars: z.boolean().default(false).optional(), 6 | fallingEvotars: z.boolean().default(true).optional(), 7 | fallingRaiders: z.boolean().default(false).optional(), 8 | hiddenUsers: z.string().default('').optional(), 9 | maxEvotars: z.number().max(1000).positive().default(100).optional(), 10 | }); 11 | 12 | export const defaultSettingsValues: UpdateSettingsDto = { 13 | showAnonymousEvotars: false, 14 | fallingEvotars: true, 15 | fallingRaiders: false, 16 | hiddenUsers: '', 17 | maxEvotars: 100, 18 | }; 19 | 20 | export type UpdateSettingsForm = UpdateSettingsDto; 21 | -------------------------------------------------------------------------------- /apps/admin/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | import { fileURLToPath } from 'node:url'; 4 | import tailwindcss from '@tailwindcss/vite'; 5 | 6 | export default defineConfig({ 7 | base: '/admin', 8 | root: __dirname, 9 | 10 | server: { 11 | proxy: { 12 | '/api': { 13 | target: 'http://localhost:3000', 14 | changeOrigin: true, 15 | }, 16 | }, 17 | port: 4200, 18 | host: true, 19 | }, 20 | 21 | // logLevel: 'warn', 22 | 23 | // preview: { 24 | // port: 4200, 25 | // host: 'localhost', 26 | // }, 27 | 28 | plugins: [react(), tailwindcss()], 29 | resolve: { 30 | alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) }, 31 | }, 32 | }); 33 | -------------------------------------------------------------------------------- /packages/database/src/seed/actions/index.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '../../client'; 2 | import { addJumpHitsActionSeed } from './add_jump_hits'; 3 | import { colorActionSeed } from './color'; 4 | import { dashActionSeed } from './dash'; 5 | import { growActionSeed } from './grow'; 6 | import { jumpActionSeed } from './jump'; 7 | import { resurrectActionSeed } from './resurrect'; 8 | import { spriteActionSeed } from './sprite'; 9 | 10 | export async function actionSeed(prisma: PrismaClient): Promise { 11 | await jumpActionSeed(prisma); 12 | await colorActionSeed(prisma); 13 | await growActionSeed(prisma); 14 | await dashActionSeed(prisma); 15 | await spriteActionSeed(prisma); 16 | await addJumpHitsActionSeed(prisma); 17 | await resurrectActionSeed(prisma); 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/database/seed/actions/index.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '@repo/database'; 2 | import { addJumpHitsActionSeed } from './add_jump_hits'; 3 | import { colorActionSeed } from './color'; 4 | import { dashActionSeed } from './dash'; 5 | import { growActionSeed } from './grow'; 6 | import { jumpActionSeed } from './jump'; 7 | import { resurrectActionSeed } from './resurrect'; 8 | import { spriteActionSeed } from './sprite'; 9 | 10 | export async function actionSeed(prisma: PrismaClient): Promise { 11 | await jumpActionSeed(prisma); 12 | await colorActionSeed(prisma); 13 | await growActionSeed(prisma); 14 | await dashActionSeed(prisma); 15 | await spriteActionSeed(prisma); 16 | await addJumpHitsActionSeed(prisma); 17 | await resurrectActionSeed(prisma); 18 | } 19 | -------------------------------------------------------------------------------- /apps/api/src/database/seed/seed.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '@repo/database'; 2 | import { TWITCH_PLATFORM_ID } from '../../constants'; 3 | import { actionSeed } from './actions'; 4 | import { dudesSkinCollectionSeed } from './skins'; 5 | 6 | const prisma = new PrismaClient(); 7 | 8 | async function main(): Promise { 9 | await actionSeed(prisma); 10 | await dudesSkinCollectionSeed(prisma); 11 | 12 | await prisma.platform.upsert({ 13 | where: { id: TWITCH_PLATFORM_ID }, 14 | update: {}, 15 | create: { 16 | name: 'twitch', 17 | }, 18 | }); 19 | } 20 | 21 | main() 22 | .then(async () => { 23 | await prisma.$disconnect(); 24 | }) 25 | .catch(async (e) => { 26 | console.error(e); 27 | await prisma.$disconnect(); 28 | process.exit(1); 29 | }); 30 | -------------------------------------------------------------------------------- /apps/website/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2017", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "preserve", 15 | "incremental": true, 16 | "plugins": [ 17 | { 18 | "name": "next" 19 | } 20 | ], 21 | "paths": { 22 | "@/*": ["./src/*"], 23 | "@repo/ui/*": [ 24 | "../../packages/ui/src/*" 25 | ] 26 | } 27 | }, 28 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 29 | "exclude": ["node_modules"] 30 | } 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | dist 5 | build 6 | tmp 7 | /out-tsc 8 | 9 | # dependencies 10 | node_modules 11 | 12 | # IDEs and editors 13 | /.idea 14 | .project 15 | .classpath 16 | .c9/ 17 | *.launch 18 | .settings/ 19 | *.sublime-workspace 20 | 21 | # IDE - VSCode 22 | .vscode/* 23 | !.vscode/settings.json 24 | !.vscode/tasks.json 25 | !.vscode/launch.json 26 | !.vscode/extensions.json 27 | 28 | # misc 29 | /.sass-cache 30 | /connect.lock 31 | /coverage 32 | /libpeerconnection.log 33 | npm-debug.log 34 | yarn-error.log 35 | testem.log 36 | /typings 37 | 38 | # System Files 39 | .DS_Store 40 | Thumbs.db 41 | 42 | # Env files 43 | .env 44 | .env.local 45 | 46 | vite.config.*.timestamp* 47 | vitest.config.*.timestamp* 48 | 49 | .turbo 50 | -------------------------------------------------------------------------------- /apps/admin/src/components/ui/label.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import * as LabelPrimitive from "@radix-ui/react-label" 3 | import { cva, type VariantProps } from "class-variance-authority" 4 | 5 | import { cn } from "@/lib/utils" 6 | 7 | const labelVariants = cva( 8 | "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" 9 | ) 10 | 11 | const Label = React.forwardRef< 12 | React.ElementRef, 13 | React.ComponentPropsWithoutRef & 14 | VariantProps 15 | >(({ className, ...props }, ref) => ( 16 | 21 | )) 22 | Label.displayName = LabelPrimitive.Root.displayName 23 | 24 | export { Label } 25 | -------------------------------------------------------------------------------- /packages/types/src/schema/command.ts: -------------------------------------------------------------------------------- 1 | import { z } from 'zod'; 2 | 3 | const id = z.number().int().min(1); 4 | 5 | const actionId = z.number().int().min(0); 6 | 7 | const text = z.string().min(1).max(255); 8 | 9 | const cooldown = z.number().int().min(0); 10 | 11 | const isActive = z.boolean().optional(); 12 | 13 | const data = z.any(); 14 | 15 | export const updateCommandDtoSchema = z.object({ 16 | id, 17 | isActive, 18 | text: text.optional(), 19 | cooldown: cooldown.optional(), 20 | data: data.optional(), 21 | }).strict(); 22 | 23 | export const createCommandDtoSchema = z.object({ 24 | actionId, 25 | isActive, 26 | text, 27 | cooldown, 28 | data, 29 | }).strict(); 30 | 31 | export const updateCommandFormSchema = z.object({ 32 | text, 33 | cooldown, 34 | }); 35 | 36 | export type UpdateCommandForm = z.infer; 37 | -------------------------------------------------------------------------------- /apps/admin/src/components/Layout/Footer.tsx: -------------------------------------------------------------------------------- 1 | export function Footer() { 2 | return ( 3 | 22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /apps/admin/src/components/ui/textarea.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import { cn } from "@/lib/utils" 4 | 5 | export type TextareaProps = React.TextareaHTMLAttributes 6 | 7 | const Textarea = React.forwardRef( 8 | ({ className, ...props }, ref) => { 9 | return ( 10 |