Limitless is a lovingly faithful recreation of the Halo Infinite menu in Next.js.
Most, but not all, menu screens are included.
A live demo is available here.
This app can be controlled with pretty much any input method, including:
- Xbox controllers (other controllers untested)
- Tabbed keyboard navigation + enter key
- Keyboard arrow keys etc. (QWERTY only, sorry Dvorak users!)
- Mouse
- Touch
Controller to keyboard mappings:
- D-Pad = Arrow Keys
- Start =
Space - Select =
Escape - Guide =
g - A / B / X / Y =
a/b/x/y - Left and Right Triggers = Left and Right
Shift - Left and Right Bumpers =
[and] - L3 and R3 =
,and.
The original objectives where:
- To learn new tools and frameworks, such as threejs, emotion css, gamecontroller.js, and framer motion.
- To experiment with building a relatively complex app that is obsessively fluid and responsive. It can be used on any device, orientation, and screen size.
- To make something of a portfolio piece that is clean, well structured, and accessible.
- To satisfy a lifelong desire to make video game menus, as silly as that sounds.
- To generally get weird and solve unexpected challenges I haven't encountered before.
Cool but unplanned things that happened along the way:
- A decent set of hooks for using gamecontroller.js in React, which I would like to improve and open source as
react-portal-gun. It can be used to instrument an existing React app simply by setting a fewtabIndexs and defining "portals". Portals enable controller focus toteleport()to other components as needed. - Everything is defined primarily with
vhunits, some%units, and the occasionalvwunits. The couple of instances ofpxunits are for enforcingmin-*properties that can otherwise fail to render sanely at certain viewpoint sizes (due to being <0.05px when rendered viavhorvwunits). - Despite all the animation, the simultaneous input methods "just work" because everything is a link. Most transitions are handled via everyday
:focuscss. Even screen readers should find this a very easy app to navigate. - A slightly clever method of wrapping emotion css'
csstemplate tag with my own, that handles converting allvhandvwunits to pixels when the "Force 4k" option is toggled. This option is necessary to ensure that everything matches up with the real menu, despite being fluid. Meanwhile wrapping emotion css was necessary due to the inherit conflict betweentransform: scale(...)andvwandvhunits, as the app can be scaled, but not necessarily the viewport. - The only media queries for responsiveness are
orientationrules. There are no breakpoints. - Lots of fun and weird CSS tricks. Other than the obvious jpegs and some svgs for the buttons, everything is pure CSS.
- 343 for making an awesome Halo game and getting multiplayer into a really great spot before ceasing development. ❤️
- McCarthy3D (Spartan) and Glitch5970 (AR, BR, Sniper) for their 3D Halo models.
@emotion/css@material-design-icons/svg@react-three+drei+fiberframer-motiongamecontroller.jsreact-swipeable
3D models are CC BY 4.0 DEED (see above), everything else is MIT.

