The 2020 Next.js rewrite, now being merged into impress!
Find a file
Matchu cc9a540cec Fix Juppie Swirl bug in /api/validPetPoses
Oops, the new Juppie Swirl color has ID 114, and there's no released color #113 yet. But our `/api/validPetPoses` code, when deciding how large to make the byte array, uses the _number_ of colors in the database.

This meant that, when Juppie Swirl was released, there wasn't a 114th slot allocated, and the loop stopped at color ID #113—so the new Juppie Swirl color #114 wasn't included in the results. This made it impossible to select Juppie Swirl as a starting color. (You could, however, model a Juppie Swirl Chia, and the wardrobe would load it successfully; and you would see the color/species picker with the correct options selected, but in a red "invalid" state.)

Now, we instead use the largest ID in the database to determine the size of the array. This means Juppie Swirl is now included correctly!

There would be network perf implications if the color IDs were a sparser space, but it's dense enough to be totally fine in practice. (But let's not release an April Fools color #9999 or anything!)
2022-02-23 00:01:10 -08:00
.github/workflows Fix GitHub Action for Sentry, attempt 6 2021-01-16 11:27:26 -08:00
.husky Add a pre-commit lint hook 2021-05-04 18:50:47 -07:00
.vscode update chakra imports 2020-12-25 09:08:33 -08:00
cypress Warn user of unsaved outfit changes 2021-05-04 16:31:48 -07:00
deploy Use Puppeteer instead of Playwright 2021-11-13 02:16:58 -08:00
pages Fix Juppie Swirl bug in /api/validPetPoses 2022-02-23 00:01:10 -08:00
public [WIP] Run cra-to-next codemod to be on Nextjs 2021-11-01 21:49:23 -07:00
scripts Oops, fix db pooling for scripts 2022-02-03 16:14:40 -08:00
src Fix db transactions with pooling 2022-01-08 18:49:00 -08:00
.eslintrc.json [WIP] Fix eslint for Next.js 2021-11-01 22:07:46 -07:00
.gitignore [WIP] Run cra-to-next codemod to be on Nextjs 2021-11-01 21:49:23 -07:00
cypress.json Basic outfit state Cypress tests 2021-04-16 04:27:19 -07:00
LICENSE.md Add LICENSE.md 2021-01-21 05:55:57 -08:00
lint-staged.config.js [WIP] Fix eslint for Next.js 2021-11-01 22:07:46 -07:00
next-env.d.ts [WIP] Run cra-to-next codemod to be on Nextjs 2021-11-01 21:49:23 -07:00
next.config.js Re-add support for nice outfit image URLs 2021-11-12 19:53:34 -08:00
package.json Reinstall yargs 2022-01-07 18:08:04 -08:00
README.md update README to mention Rails app is gone 2020-09-04 04:09:01 -07:00
tsconfig.json [WIP] Run cra-to-next codemod to be on Nextjs 2021-11-01 21:49:23 -07:00
vercel.json Re-add support for nice outfit image URLs 2021-11-12 19:53:34 -08:00
yarn.lock Reinstall yargs 2022-01-07 18:08:04 -08:00

Dress to Impress beach logo

Dress to Impress 2020

This is a rewrite of the Neopets customization app, Dress to Impress!

It's a React app, built with create-react-app, running on Vercel, JAMstack-style.

The motivating goals of the rewrite are:

  • Mobile friendly, to match Neopets's move to mobile.
  • Simple modern tech, to be more maintainable over time and decrease hosting costs.

If you want to contribute, please reach out to Matchu! This repository is almost shareable, but the main limitation is that we currently run even our development server against the production database, and those credentials are private. But we can change that if there's interest!

Architecture sketch

First, there's the core app, in this repository.

  • React app: Runs on Vercel's CDN. Code in src/app.
  • API functions: Run on Vercel's Serverless Functions. Code in api and src/server.

Then, there's our various data storage components.

  • MySQL database: Runs on our Linode VPS, colocated with the old app.
  • Amazon S3: Stores PNGs of pet/item appearance layers, converted from the Neopets SWFs. (Once Neopets releases HTML5-compatible assets for all their items, we can hopefully remove this!)

Finally, there's our third-party integrations.

  • Auth0: For authentication. Data imported from our old OpenNeo ID auth database.
  • Honeycomb: For observability & performance insights on the backend.
  • Discord: For logging Support users' actions to a private Discord server.
  • Neopets: We load pet data from them! And plenty of assets!

Notable old components not currently included in Impress 2020:

  • Elasticsearch: Used for lightning-fast item search queries. So far, we're finding the MySQL queries to be fast enough in practice. Might consider using some kind of fulltext query engine if that doesn't scale with more users!
  • Resque: Used to schedule background tasks for modeling and outfit thumbnails.
  • Outfit thumbnail generation: Used for outfit thumbnails in the app. I'm wondering if there's a way to get away with not doing this, like just rendering the layers... but I suppose if we want a good social share experience, then we'll probably want this. Maybe we can generate them on the fly as API requests, instead of adding a data storage component?
  • Memcache: Used to cache common HTML and JSON snippets. Not yet needing anything similar in Impress 2020!
  • The entire old Rails app! No references to it in here, aside from some temporary URL links to features that aren't implemented here yet.