My IP address is: 54.81.96.130 Launching my AMI I initially put it on a private subnet. Even though it had a public IP address and the security group was right, I wasn't able to connect to it.
No problems worked just like it said in the instruction.
This was easy. I was careful to use the correct structural elements such as header, footer, main, nav, and form. The links between the three views work great using the a element.
The part I didn't like was the duplication of the header and footer code. This is messy, but it will get cleaned up when I get to React.
This took a couple hours to get it how I wanted. It was important to make it responsive and Bootstrap helped with that. It looks great on all kinds of screen sizes.
Bootstrap seems a bit like magic. It styles things nicely, but is very opinionated. You either do, or you do not. There doesn't seem to be much in between.
I did like the navbar it made it super easy to build a responsive header.
<nav class="navbar navbar-expand-lg bg-body-tertiary">
<div class="container-fluid">
<a class="navbar-brand">
<img src="logo.svg" width="30" height="30" class="d-inline-block align-top" alt="" />
Calmer
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active" href="play.html">Play</a>
</li>
<li class="nav-item">
<a class="nav-link" href="about.html">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="index.html">Logout</a>
</li>
</ul>
</div>
</div>
</nav>
</header>I also used SVG to make the icon and logo for the app. This turned out to be a piece of cake.
<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
<rect width="100" height="100" fill="#0066aa" rx="10" ry="10" />
<text x="50%" y="50%" dominant-baseline="central" text-anchor="middle" font-size="72" font-family="Arial" fill="white">C</text>
</svg>Setting up Vite and React was pretty simple. I had a bit of trouble because of conflicting CSS. This isn't as straight forward as you would find with Svelte or Vue, but I made it work in the end. If there was a ton of CSS it would be a real problem. It sure was nice to have the code structured in a more usable way.
This was a lot of fun to see it all come together. I had to keep remembering to use React state instead of just manipulating the DOM directly.
Handling the toggling of the checkboxes was particularly interesting.
<div className="input-group sound-button-container">
{calmSoundTypes.map((sound, index) => (
<div key={index} className="form-check form-switch">
<input
className="form-check-input"
type="checkbox"
value={sound}
id={sound}
onChange={() => togglePlay(sound)}
checked={selectedSounds.includes(sound)}
></input>
<label className="form-check-label" htmlFor={sound}>
{sound}
</label>
</div>
))}
</div>