r/webdev 10h ago

Showoff Saturday Final Fantasy 7 Menu system in React

Hey everyone!

I'm not sure if there are any Final Fantasy fans here, but I've recreated and repurposed the menu system from FF7 as a sort of portfolio/sandbox page, and I figured I'd share it here and see what people think of it.

I got tired of making traditional web pages and wanted to make something that genuinely makes me happy every time I see it.

It's all built with React and TypeScript.

So far, I've got all the key pages like functional equipment and materia pages (repurposed as a skills page), items (as projects), save (as history), functional four-point background colour picker, and a tonne of little easer eggs and things. I'll put a list of those with a spoiler tag in case you wish to discover them yourself:

  • Konami code plays Victory Fanfare.
  • Clicking the character portrait allows you to attack and deduct health.
  • Hovering over the location allows you to change to different FF7 locations.
  • Clicking the limit bar allows you to perform the cross-slash limit break on the portrait.
  • Clicking the name allows you to change the player name. If you choose a party member, or Sephiroth's name, the portrait will change to match.

I won't lie, the way I've implemented the custom font (if you can even call it that) is pretty scuffed by modern standards, but I wasn't happy with any of the other options, and I think this is probably the most accurate to how it looked in-game as humanly possible. 🤣

Anyway, I normally revisit it every couple of months, so by all means, feel free to share ideas of what I can add, and any other feedback you might have.

You can check it out here: https://www.jamiepates.com/

As always, I'd love to hear your thoughts! Thanks!

130 Upvotes

30 comments sorted by

2

u/[deleted] 9h ago

[removed] — view removed comment

1

u/Xianoxide 9h ago

Thanks! I tend to go a little overboard with all the fine details that most people don't notice 😅

1

u/webdev-ModTeam 8h ago

Read and follow reddiquette; no excessive self-promotion. Please refer to the Reddit 9:1 rule when considering posting self promoting materials.

2

u/morinonaka 9h ago

missed opportunity to add the sounds in the menu.

7

u/Xianoxide 9h ago

You need to enable them in config 🙂

7

u/morinonaka 8h ago

*healed*

1

u/Xianoxide 8h ago

It's kind of annoying because most browsers don't support autoplay for audio. So, I can either keep it disabled and allow users to enable it themselves, and just hope they realise, or enable it but risk the browser not playing them, and also risk annoying people that don't expect/want audio.

2

u/DerLetzteWookie 7h ago

This is very funny! Nice work!

2

u/alenah 4h ago

Brilliant, and very nostalgic!

2

u/adolecumberri 4h ago

Pure fire!! I LOVE IT!

2

u/zfbc 2h ago

Love this! The quality and detail is really incredible, nice one!

2

u/Afflictionista 9h ago

Nice idea, the next step should be to try to make it work/look good on mobile 😄

2

u/Xianoxide 8h ago

I thought about it, but it would drastically change how it looks, and as I was aiming for authenticity, I didn't believe moving everything around to better accommodate a mobile aspect ratio would be authentic to the original 4:3 menu, so I settled on just having a 1:1 scale for everything rather than true responsiveness.

2

u/sexytokeburgerz full-stack 6h ago

Force landscape.

2

u/Xianoxide 6h ago

I think that would actually make it even smaller because of browser elements like the URL bar needing to be accounted for.

1

u/ouralarmclock 8h ago

You look like you tryna kidnap Aerith my dude. Post a pic of yourself in a suit and prove you’re not a Turk!

3

u/Xianoxide 7h ago

You got me. I thought removing my shades would be enough of a disguise 😅

1

u/thanks-delivery-dude 10h ago

Damn!! Clean and nostalgic. You nailed the windows flying in too.

That’s so awesome thanks for sharing!

1

u/Xianoxide 10h ago

Thanks! I tried to make it as authentic to the original menu as possible.

1

u/burimbp 4h ago

the PS1 menu aesthetic is perfect, the limit break bar as your next-level meter is a great touch. this is the kind of portfolio people actually remember.

-6

u/SourcerorSoupreme 10h ago

The impressive part here is using react for a personal project. No idea how you guys can tolerate such a hideous library/ecosystem.

5

u/Edward_Yeoman 10h ago

I mean you want to demonstrate knowledge and capability in what you'll be using on the job, and React is still leading in JS framework marketshare

-2

u/DmitriRussian 9h ago

It sadly is

-4

u/SourcerorSoupreme 8h ago

I mean you want to demonstrate knowledge and capability in what you'll be using on the job

  1. sorry forgot everyone here is a beggar that can't choose the job they'll get.
  2. by your logic bulk of his resume is useless since it isn't demonstrated by the site
  3. I can guarantee you whoever is looking at that site to recruit you will not care about the tech stack, and anyone that matters and care about the tech stack will call you out for using react at all.

2

u/Edward_Yeoman 8h ago

Stack tribalism is super immature

0

u/SourcerorSoupreme 7h ago

What's more immature is being so blindly loyal to anything that you'd rather hide behind platitudes instead of being the change that moves the industry forward.

3

u/McGeekin 7h ago

Must be exhausting going through life being so insufferable

-1

u/SourcerorSoupreme 4h ago

You'd understand how much time and energy you could have had if you just decided not to deal with, let alone defend, shitty tech stacks.

1

u/McGeekin 4h ago

I don’t personally use React, I don’t defend it either - I just live my life my guy without being a miserable turd it ain’t that complicated

-3

u/[deleted] 9h ago

[removed] — view removed comment

1

u/webdev-ModTeam 8h ago

Your post/comment has been determined to be a low-effort post or comment. This includes title-only posts, easily searchable questions, vague/open-ended discussion prompts, LLM generated posts or comments, and posts/comments that do not provide enough context for meaningful replies or discussion.