Española Way is a historic street in Miami Beach, Florida. It’s located between 14th and 15th Streets, between Washington Avenue and Pennsylvania Avenue. It’s a pedestrian-only street with shops, galleries, restaurants, and bars.
Miami Beach’s Lincoln Road is one of the most unique shopping districts in the world, full of stunning architecture, world-class culture and destination retail stores spanning 8 blocks.
Must check in no later than 3 PM to board the cruise
3:30 PM
Board Cruise and Go to Stateroom (with Balcony)
Stateroom # 6236
4:30 PM
Cruise Departs to CocoCay, Bahamas
4:30 PM
Sailaway Spots
Go to the bow (front) of the ship where the helipad is.
There are 2 ways there:
Go outside on deck 4, walk forward, climb up a set of stairs and continue walking forward until you reach the helicopter pad.
Walk all the way forward on Deck 5, enter the Star Lounge, take an immediate right just past the DJ booth. There’s a set of unmarked doors to the helipad.
Middle (Midship): Studio B Ice Rink, Photo Studio, Art Gallery
Back (Aft): Main Dining Hall
Rooms: Ocean-View Rooms, Interior Rooms
Deck 4
Front (Forward): Royal Theater
Middle (Midship): Izumi Hibachi & Sushi, Schooner Bar, Casino Royale, Playmakers Sports Bar & Arcade, Boleros, Centrum
Back (Aft): Main Dining Hall
Deck 5
Front (Forward): Outdoor Deck
Middle (Midship): Star Lounge, Library Card Room, Sorrento’s, Bull& Bear Pub, Promenade Shops, Royal Promenade, Ben & Jerry’s Ice Cream, Cafe Promenade, Next Cruise, Shore Excursions, Guest Services, R Bar
Middle (Midship): Solarium, Whirlpool, The Lime & Coconut, Main Pool, Sports Pool, Splashaway Bay, El Loco Fresh, PADI, Chops Grille, Giovanni’s Italian Kitchen
Back (Aft): The Plaza Bar, Windjammer Cafe
Deck 12
Front (Forward): Spa
Middle (Midship): The Lime & Coconut, Running Track, Movie Screen
Back (Aft): Nursery, Adventure Ocean, Arcade, Johnny Rockets
Deck 13
Front (Forward): Freedom Dunes
Back (Aft): Rock Climbing Wall, Sports Court, The Perfect Storm Waterslides, Flowrider
Wristbands are required and can be obtained at any towel hut
Aquaventure is cashless. Pay by credit card.
Lockers are available and subject to availability
Towers are provided for day use
Complimentary life jackets are provided for day use
Wear sandals or water shoes because the pathways can get very hot
Shortest wait times for the water slides and the rapids river are when the rides open at 10 AM
The center of the action is the Mayan Temple Pool
Action Plan
Get a locker
Go on Mayan Temple water slides (bring short and 3.4″selfie stick)
Go on Power Tower water slides (bring short and 3.4″selfie stick)
Go on river rides (bring short and 3.4″selfie stick)
Have lunch
Go to pools (bring 3.4′ and 10′ selfie stick)
Go to the beaches (bring 3.4′ and 10′ selfie stick)
Take photos at vista points (bring dry bag)
Explore the Royal Towers (bring dry bag)
Visit the Dig
Mayan Temple Water Slides
Leap of Faith: a near 60-foot near-vertical drop propels you through a clear acrylic tunnel into a shark-filled lagoon [video]
Serpent Slide: travel 5-stories down in complete darkness, then emerge and float through an acrylic tunnel in a shark-filled lagoon [video]
Challenger Slide: race down twin high-speed slides with friends, then check your speeds on the time clocks at the bottom to see who won [video]
Jungle Slide: take a thrilling safari slide through the exotic jungle-scape and caves built right into the heart of the Mayan temple [video]
Power Tower Water Slides
The Abyss: Drop into complete darkness with twists and turns and end in an underground cave with alligator gar and tropical fish. [video]
The Surge: Brave a camel back drop into a cavern with quick downward twists and turns into white-water rapids. [video]
The Drop: Drop through darkness, then enjoy open-air twists and turns before splashing down into the Rapids River [video]
The Falls: This slide shoots you 58 feet to ground level, then propels you through a water roller coaster of twisting tubes. [video]
River Rides
The Rapids River: A mile-long river ride with extreme rapid, rolling waves, water escalators and surprises. [video]
Lazy River: A relaxing, scenic, quarter-mile loop guided by a gentle current. [video]
Pools
Royal Baths: This low key pool features two sunburst mosaics and soothing music with the iconic Royal Towers as a backdrop.
Mayan Temple Pool: One of the most popular pools at Atlantis, adjacent the slides of the Mayan Temple. A live DJ spins hot beats.
Baths Colonnade Pool: Large columns with hieroglyphs and rockwork structures adorn this free-form pool.
Grotto Pool: A zero-entry pool framed by two cascading waterfalls. Preferred seating with lockable safe and electronics charging station available for a fee.
River Pool: A relaxing zero-entry pool just steps away from Atlantis Beach and removed from the main activity of Aquaventure.
Blu Pool: This pool offers a cool vibe with music from the 80s, 90s, and today’s billboard hits.
Beaches
Atlantis Beach: An action-packed beach located closest to Beach, Coral and Royal Towers.
Cove Beach: This beach offers a protective cove, good for snorkeling and just soaking up the sun.
Paradise Beach: A tranquil stretch of sand, perfect for relaxing closest to the Reef.
Paradise Lagoon Beaches: Paradise Lagoon offer two beaches for snorkeling, paddle boats, and other water sports, in a protected environment – great for families.
Other
The Dig: Polished marine life & aquarium exhibits in a series of tunnels at the posh Atlantis resort.
2:00 PM
Take Shuttle Back to Ship
2:30 PM
Explore Downtown – Straw Market
3:00 PM
Explore Downtown – Queen’s Staircase
4:00 PM
Go Back to Ship
5:00 PM
Depart Nassau Back to Miami
5:30 PM
Pack Bags
Cruise staff will pick up luggage at night. Keep a foldable overnight / duffle bag to store night clothes and toiletries.
After purchase, you will receive a voucher via email.
You must EXCHANGE this voucher at least 45 minutes prior to scheduled departure time at one of our ticket booths at Bayside Marketplace (NOT in the line where you will board) for a physical boarding pass.
There’s no free food on the plane. Eat at the airport. Bring trail mix. American Airlines is in the north terminal (concourse D, 2nd Level Departures).
While there are many services that let you buy a hat and customize it, you may not like the style, quality or fit of the hat. Also, you are limited in how you can customize it. In this post, I explain how I customized a hat I already own. Since I’m planning to go on a cruise, I wanted a hat that kinda looked like a captain’s hat. My preferred hat is a black cap that I get at a nearby mall.
I wanted to customize it with design elements from the captain hat shown below.
After much research, trial and error, I ended up with this:
Place the patches on the hat and secure using sewing pins.
When you know where the patches should go, put sewing pins in hat at certain points along perimeter of patches to guide where the patches should go.
Add glue to the back of the patches and place patches on hat.
Insert sewing pins into hat through patches to secure patches in place. If necessary, clamp patches to hat using a clamp.
Decide where to put the gold buttons.
Drill hold in hat where gold buttons would go.
Fasten gold buttons to hat via the holes you just created.
For the buttons, I actually took mine off of a cheap hat I had bought on Amazon. The buttons have 2 flat metal pins that can be folded to secure the buttons.
The Caribbean is a subregion of the Americas that includes the Caribbean Sea and its islands.
Best Beaches
If your idea of the best beach is like mine, which are beaches that have
shallow turquoise or clear water,
fine white sand,
no garbage, seaweed, rocks and corral
like this
then, looking at the Google satellite image above, it should be evident that one spot stands out: The Bahamas! Actually, if we zoom in on that area, we’ll find that the Turks and Caicos Islands also have that same turquoise color.
Grace Bay Beach is located on the west side of Providenciales island. As you can see in the picture above, it looks amazing. But, the beach and water on the eastern side looks even better according to the zoomed-out photo below.
So, what about the Bahamas? According to Lonely Planet, two beaches that meet the criteria above are
Junkanoo beach Located in the city of Nassau on the island of New Providence and near the cruise port, this beach gets really crowded.
Tropic of Cancer Beach This beach is located in a small town far from Nassau. You may feel lonely at this beach.
Another popular beach is Cabbage beach on Paradise Island where the Atlantis resort is in Nassau, Bahamas.
Best Luxury Island Destination
Though the Bahamas may not have won the record for having the best beach, it did consistently win for being the best luxury island destination in the Caribbean.
Probably the most notable luxury spot in the Bahamas is the Atlantis resort on Paradise island.
Other Islands
I’m sure there are many other islands with very nice beaches. Some may even be better than the ones mentioned above, but they may be so remote that they would be difficult to get to. You may think that the U.S. and British Virgin Islands (U.S.V.I and B.V.I.) have nice beaches, but from my personal experience visiting them, they are nowhere as nice as the ones mentioned above. There is one beach on Sint Maarten however that is nice and very unique and attractive among tourists. It’s the Sint Maarten Airport Beach or Maho Beach, where the airport landing strip is literally right next to the beach.
The airport runway is half the length of typical runways, so airplanes have to land close to the start of it to avoid overrunning the landing strip.
Tourists love taking photos of themselves standing right below a plane coming in for a landing.
Weather
The best time to go to the Caribbean is during the winter months when the temperature isn’t too high and rainfall is low. Below are average temperatures and rainfall by month for the Bahamas, Turks & Caicos, and Sint Maarten.
The Bahamas
Turks & Caicos
Sint Maarten
And since many cruises depart from Miami, it may be worth it to spend a few days in Miami before or after the cruise. The weather is Miami similar to that in the Caribbean.
Miami
Based on the graphs above, it would appear that February is the best time to go.
Humidity and Heat Index
Note that the Caribbean has a humid climate, and high humidity actually makes you feel hotter than in low humidity climates. The heat index is a measure of how hot you feel when taking into both temperature and humidity into consideration. Learn more.
In Nassau, Bahamas,
On average, September is the most humid month, at 81.0%.
On average, April is the least humid month, at 74.0%.
The average annual percentage of humidity is: 78%
According to this heat index calculator, if the temperature is 79 degrees and the humidity is 78%, then the heat index is 82 degrees Fahrenheit.
Flights
You can easily find flights from Miami to the Bahamas, Turks and Caicos, and Sint Maarten. Below are non-stop flights to each country, flight time, and cost for travel in February 2024.
Destination
Travel Time
Cost
Nassau, Bahamas
1 hr 10 min
$262
Sint Maarten
3 hr
$400
Turks and Caicos
2 hr
$200
Cruises
The Caribbean is a popular region for cruises. Many cruise lines go to all 3 countries mentioned above. But, cruise ships don’t necessarily dock at the specific islands mentioned above. Here are the cruise ship ports of call for each country.
Country
Port of Call
The Bahamas
Nassau City, New Providence Island
The Bahamas
Princess Cays
Turks & Caicos
Grand Turk
Sint Maarten
Sint Maarten
In particular, note that Grand Turk is an island in Turks & Caicos that is very far from Providenciales island where the best beach (Grace Bay Beach) is. You’d have to fly from Grand Turk to Grace Bay Beach.
If you are looking for a cruise ship that goes to these islands, you can do a search from sites like Cruiseweb.com where you can specify search criteria like
month (January, February)
ports of call (Nassau and Grand Turk)
etc
The cruise line that primarily goes to Grand Turk is Carnival. Following are some cruise itineraries that meet the criteria above.
Ship: Carnival Magic – 6-Night Cruise
Sun Feb 18, 2024 – Sat Feb 24, 2024
Date
Port
Arrival
Departure
Feb 18, 2024
Miami
—
3:30 PM
Feb 19, 2024
Fun Day At Sea
—
—
Feb 20, 2024
Grand Turk, Turks & Caicos
8:00 AM
5:00 PM
Feb 21, 2024
Amber Cove, Dominican Republic
8:00 AM
5:00 PM
Feb 22, 2024
Fun Day At Sea
—
—
Feb 23, 2024
Nassau
8:00 AM
4:00 PM
Feb 24, 2024
Miami
—
8:00 AM
Ship: Princess Cruises – 14-Night Cruise
Date
Port
Arrival
Departure
Feb 11, 2024
Fort Lauderdale (Port Everglades), Florida
—
3:00 PM
Feb 12, 2024
Princess Cays, Bahamas
9:00 AM
4:00 PM
Feb 13, 2024
Cruising
—
—
Feb 14, 2024
Ocho Rios, Jamaica
8:00 AM
4:00 PM
Feb 15, 2024
Georgetown, Grand Cayman, Cayman Islands
7:00 AM
4:00 PM
Feb 16, 2024
Cozumel, Mexico
10:00 AM
7:00 PM
Feb 17, 2024
Cruising
—
—
Feb 18, 2024
Fort Lauderdale (Port Everglades), Florida
7:00 AM
3:00 PM
Feb 19, 2024
Princess Cays, Bahamas
9:00 AM
4:00 PM
Feb 20, 2024
Cruising
—
—
Feb 21, 2024
San Juan, Puerto Rico
9:00 AM
10:00 PM
Feb 22, 2024
St. Thomas, U.S. Virgin Islands
8:00 AM
5:00 PM
Feb 23, 2024
Cruising
—
—
Feb 24, 2024
Cruising
—
—
Feb 25, 2024
Fort Lauderdale (Port Everglades), Florida
7:00 AM
—
Cruise Line Private Islands
Some cruise lines bought or made islands just for their passengers. Since the islands were custom-made for tourists, they have many tourist benefits that you may not find on other islands. Following are some notable islands.
Ocean Cay, The Bahamas: MSC Cruises
This island is located on a former sand extraction site. MSC Cruises owns it. It’s located pretty close to Miami.
Google Maps’ satellite view shows a lot of beaches with turquoise water.
There’s a beach right by the port where the cruise ship docks. If you want calm water and are afraid of accidentally being pulled out to sea, you can swim between the two beaches at the lagoon.
Perfect Day at CocoCay, Bahamas: Royal Caribbean
This island is owned by Royal Caribbean and is exclusively for Royal Caribbean guests. The Google Maps satellite view may make you think the water isn’t turquoise, but it’s deceiving. Many photos show that the water is actually very turquoise. Note that the pier can accommodate two ships, so if you want to avoid crowds, try to find a trip when only your ship will dock there.
With so many activities and attractions, CocoCay looks more like an amusement park. Some activities and amenities include
Castaway Cay is owned by Disney. Most of the island appears undeveloped. The water by the pier seems to be pretty turquoise.
According to the Disney map, the only developed area is by the pier. It’s nice how they have a breakwater barrier to keep the water calm and to block you from accidentally getting pulled out to sea.
Half Moon Cay, Bahamas: Holland America Line
Below is a satellite view of Half Moon Cay, also called Little San Salvador. Only 3% of the island has been developed for cruise passengers. The color of the water looks pretty good. You will find a 2-mile-long powdery white sand beach and a rugged coastline beyond. There is a natural lagoon called Bone Fish Lagoon that is a breeding ground for sharks, turtles and bonefish.
One interesting activity you can do there is ride a horse in the water.
Great Stirrup Cay, Bahamas: Norwegian Cruise Line
Great Stirrup Cay is located next to Perfect Day CocoCay.
Labadee, Haiti: Royal Caribbean
This destination offers some interesting activities. You can go to the mountaintop for a ride on the alpine Dragon’s Tail Coaster. The thrilling descent begins with panoramic views of Labadee from 680 feet above the coastline atop Santa Maria’s lookout mountain. On the way down you’ll reach speeds of 30 miles per hour and zip through 360-degree twists and turns.
There is also a zip line and Superman-style flight line that both let you soar a half mile over the water.
Activities
There are many activities you can do when visiting Caribbean islands, including
Snorkeling
When snorkeling, it would seem better to wear a full-face snorkel mask and a snorkel vest. The mask will give you better visibility and you don’t have to keep your mouth closed. The snorkel vest will easily keep you afloat while allowing your face to be submerged in the water. A life jacket, unlike a snorkel vest, will keep your head above the water, which is not what you want for snorkeling.
Power snorkeling
Lounging in the water
Whether in a swimming pool or at the beach, these inflatable hammocks are great as they keep your head above the water but your body in it.
Jet ski tour
Explore the island by scooter
Catamaran tour
Parasailing
Ride a banana boat
Cruise around in a seabob
Mini Personal SUB
Other activities include
Snuba (with an “n”) diving
Scuba diving
Fishing
Horseback riding in the water
Dune buggy tour
Swimming
Playing at a water park with slides and wave pool
Exploring the island by foot, bike, scooter
Ziplining
Kayaking
Sint Maarten/Saint Martin
This island of Sint Maarten/Saint Martin is shared by 2 nations. Sint Maarten is Dutch and Saint Martin is French. It is the smallest inhabited island in the world. The entire island is just 37 square miles.
Some things to do there include
Planespotting
At Maho beach, you can watch commercial jet planes fly really low over your head as they come in for a landing.
The Royal Islander Club Resort La Plage is located next to the airport landing strip and has access to the beach where planes directly fly over.
Soualiga Sky Explorer
The Sky Explorer is a chairlift attraction in St. Maarten. The ride is approximately 25 minutes long and takes riders to the top of Sentry Hill, the highest elevation in St. Maarten. The ride spans 2,997 feet and includes two lifts.
Flying Dutchman
The Flying Dutchman is the world’s steepest zip line! You’ll be attached to a flight line in a secure harnessed chair, launching you on the 1050-foot drop in elevation over 2800 feet to experience the ride of a lifetime.
Sentry Hill Zip Line
Schooner Ride
Melange Grill
This restaurant is similar to Brazilian BBQ and Korean BBQ.
Select your Appetizer
Choose your Salad
Enjoy a continuous flow of grilled meats and Seafood right at your table with an assortment of sauces and sides !!
Horseback Riding (1-hour tour)
Lucky Stables at Seaside Nature Park offers a wide variety of tours and trail rides. Ride horses peacefully along one of the many trails that span this beautiful island. Or, ride into the sea with your horse and treat the animals to a cooling swim in the ocean!
Hiking Tour
The many trails at Seaside Nature Park can be explored easily with some water and sturdy hiking shoes while sharing in the extensive knowledge of a professional guide about the flora, fauna and history of the park.
People have different preferences when it comes to vacation. Some may want to just be a beach bum. Others may want to just do casual sightseeing. For me, I want maximum activity options and clean, turquoise beaches with fine white sand. I also want to go on a cruise because that in and of itself is an experience full of on-board fun activities. Since it’s not possible to cruise to the best beach in the world, Grace Bay Beach in Turks and Caicos, and since Perfect Day at CocoCay is the most developed cruise-owned island full of convenient vacation activities, I think my preferred itinerary would include Perfect Day at CocoCay. And since Nassau is nearby, is a common cruise port of call, and is a popular destination, it would also be on my itinerary. Sint Maarten is one particular island with a lot of fun activities as well, but it may not be possible to find a cruise that goes to all 3 locations. Plus, spending one day at Sint Maarten is likely not long enough. So, I think my preferred itinerary would be
Flight: Home > Miami (spend 0 to 3 nights)
Cruise:
Miami
Nassau (Atlantic AquaVenture, Cottage Beach, Downtown)
Perfect Day at CocoCay
Day at Sea
Miami
Flight: Miami > Sint Maarten (2 or 3 nights) > Miami
Flight: Miami > Home (spend 0 to 3 nights)
Here’s one actual itinerary.
4 Night Bahamas & Perfect Day Cruise
Ship: Royal Caribbean Freedom of the Seas
Date
Port
Arrival
Departure
Mon, Feb 12, 2024
Miami
—
4:30 PM
Tue, Feb 13, 2024
Perfect Day at CocoCay
7:00 AM
5:00 PM
Wed, Feb 14, 2024
Cruising Day at Sea
Thu, Feb 15, 2024
Nassau, Bahamas
8:00 AM
5:00 PM
Fri, Feb 16, 2024
Miami
6:00 AM
—
Pricing by Room Category:
Interior
$293
Outside View
$422
Balcony
$595
Suite
$961
Note that the balcony is pretty small.
Atlantis Resort
Hotel room: Minimum 2-night stay: $270 – $359 / night.
Day Pass: $190 / person
There’s a hack to get access to Atlantis without spending 2 nights and paying a high price. If you stay at the Comfort Suites on Paradise Island, Bahamas, you’ll have full access to Atlantis, which is just a 3-minute drive away. As an example, the cheapest cost to stay at Atlantis on February 19. 2024 is $363 / night with a minimum 4-night stay. The cost to stay at Comfort Suites on the same dates is just $246 with no 4-night-minimum restriction.
Cruise Ports
Some cruise ports can accommodate multiple ships at the same time. The more ships there are, the more crowded the place will be. Therefore, it’s preferable to choose a trip with the fewest ships at your scheduled ports of call.
Nassau
As you can see, the port at Nassau can accommodate up to 5 ships.
For the itinerary above, the ship “Freedom of the Seas” is scheduled to dock on Feb 14, 2024. The Nassau, Bahamas cruise terminal website shows the schedule by month. Here’s the schedule for February 2024. Unfortunately, it looks like the terminal will be full of ships that day.
Perfect Day at CocoCay
Perfect Day at CocoCay is owned by Royal Caribbean, so only their ships can dock there. The port is smaller. It can accommodate a maximum of 2 ships. For the itinerary above, the ship “Freedom of the Seas” is scheduled to dock on February 13, 2024. According to CruiseMapper.com, there will be 2 ships that day.
Miami
Since many cruises depart from Miami and Miami itself is an interesting destination, it makes sense to spend some time there before or after going on a cruise.
Following are some things to do when visiting Miami.
Miami Hop-On-Hop-Off Bus
Go on a double-decker, open-air hop-on-hop-off bus and be taken around many of the tourist spots. This is an easy way to see a lot and get a sense of the area. Afterwards, you can spend time at individual spots you are interested in. There are many tour bus operators. BigBus, shown below, is just one of them.
Unique outdoor destination featuring huge, colorful street murals by artists from around the globe.
Bayside Marketplace
Enjoy a drink along the water (or on it), snagging a seat at one of Bayside Marketplace’s big-name restaurants or setting off on a sunset cruise touring Biscayne Bay’s islands.
Lock & Load Museum
Look at all sorts of guns and practice shooting some.
ARTECHOUSE MIAMI
Art + Technology Museum
Superblue Miami Immersive Art Experience
Explore a mirrored labyrinth, see digital worlds immersed in seasonal flowers and waterfalls, and watch your own heartbeat as it glows with 3,000 lights.
E-bikes are prohibited on all sidewalks in Miami Beach, including along the Beachwalk. They are also prohibited on South Pointe Park and Pier, Marina Baywalk, and Lincoln Road Mall.
However, Florida state law allows e-bikes to be operated in the same locations as regular bicycles. This means they can be ridden on: Roads, Bike lanes, Bike paths, Multi-use paths, Sidewalks.
If your e-bike is class 1 (or maybe 2) and limited to 20mph, you should be legally allowed on the beach.
Florida allows all classes of e-bikes, including Class 3 e-bikes — provided they don’t exceed speeds of 28 mph. The bike also can’t have an electric motor power with a wattage exceeding 750.
Miami Beach also has 11 miles of green bicycle lanes.
Free Miami Beach Trolley
From 8 a.m. to 11 p.m., 7 days a week at approximately 20-minute average service frequency along each route.
Explore Miami aboard a fully-narrated bilingual sightseeing cruise along scenic Biscayne Bay – a top-rated thing to do in Miami! Cruise around Biscayne Bay and see the spectacular coastal sites including the beautiful downtown Miami skyline, the Port of Miami, Fisher Island, Miami Beach and “Millionaire’s Row™” – the Homes of the Rich and Famous™.
This is a science museum, aquarium and planetarium. The cutting-edge 250-seat Frost Planetarium takes you on visual joyrides that both thrill and educate. Though it might seem like you’re really hurtling through space or weaving through a coral reef or DNA strand, that ultra-real immersive experience is the result of a 16-million-color 8K visual system using six 3D-capable projectors and surround sound. The dome is tilted forward at 23.5 degrees, allowing its 67-foot span to fill your field of vision as if you’re flying—imagery comes at you from above, below and the peripheral edges, creating a nearly 360-degree view of whatever world you’re in.
Española Way is a historic street in Miami Beach, Florida. It’s located between 14th and 15th Streets, between Washington Avenue and Pennsylvania Avenue. It’s a pedestrian-only street with shops, galleries, restaurants, and bars.
Experience stunning 3D illusions and art at the Museum of Illusions in Miami. Capture memorable, interactive photos and have fun with friends and family.
Lincoln Road Shopping District
Miami Beach’s Lincoln Road is one of the most unique shopping districts in the world, full of stunning architecture, world-class culture and destination retail stores spanning 8 blocks.
If you’re a non-technical person who is part of a marketing team working for a company that depends a lot on a website, chances are you will often need to ask a team of web developers to make website updates for you. Your particular website may not be easily updated using a content management system (CMS), and even if it could, many non-technical people would rather just send an email to request their website changes. Asking developers to update a website is fine, but only if the update requests are clear. Otherwise, the requestors risk wasting their time and other people’s as well. Unfortunately, the reality is most people don’t know how to clearly communicate their change requests. There are many website annotation tools that claim to be able to simplify the communication process, but in real-world situations, I haven’t found any that were good enough. Plus, adding a new tool requires learning something new, which many people are unwilling to do or don’t have time for.
In this post, I’ll share one approach that non-technical people can use to easily and clearly communicate website change requests to minimize misunderstandings, delays, and lots of back-and-forth messages. And since most people already know and are comfortable using MS Word or Google Docs, this approach only requires a word processor.
Since a picture is worth a thousand words, it’ll be a lot easier to show a screenshot of a section of a web page rather than try to explain the section using words. And since you may want to move some sections around, it’s helpful to number each section. And since you may collaborate with other people in requesting website changes, we’ll use MS Word or Google Docs for our change requests. I’m going to use Google Docs because I find it easier to use.
Create a new Google doc
Give it a name like “Adobe Premier Product Page Changes”.
Change the page margins to 0.25″ on all sides
Under View, uncheck “Show print layout” if it is checked.
At the top of the doc, put the URL to the page, e.g. https://www.adobe.com/products/premiere.html
Insert a table containing 3 columns and 20 rows.
In row 1, cell 1, enter “#”
In row 1, cell 2, enter “SECTION”
In row 1, cell 3, enter “CHANGES”
In the first column, enter a consecutive number in each cell starting from 1 and make it narrow enough just for the numbers
Take a screenshot of each section and paste them in the middle column
In the right column, describe your change request.
There are at least 3 major things that affect music audio quality:
Speakers
Audio source, e.g. mp3 file, FLAC file, etc
Digital-to-Analog Converter (DAC)
Some people may argue that transmitting audio over Bluetooth degrades sound quality, but the reality is the difference is so small that it’s negligible.
Speakers
Needless to say, quality speakers are necessary to hear music at a higher quality. Don’t expect to hear quality audio from cheap $10 earphones. Since I’m not an audiophile and I’m not interested in spending thousands of dollars just for speakers, I just have what I guess are prosumer speakers. Specifically, I have:
And since it makes no sense to buy them at full price, I buy them renewed on Amazon for a big discount because even renewed, they look and function exactly like they are brand new.
The WH-1000XM4 has a better sound stage, but it’s bulkier and leaks audio a lot. Also, it’s not great for working out because I feel it moves around too much and gets in the way of my workout. The WI-1000XM2 is compact, doesn’t leak audio, and can easily rest on my neck when not in use. The problem is when listening to music on my phone, the volume is often not high enough, especially when at the gym or when traveling by plane. This is where having an amplifier (amp) takes care of volume issues.
Audio source
I’ve dabbled with lossless FLAC files, but when compared to high-bitrate mp3 files, I personally can’t notice a big enough improvement to justify the cost and huge file size. I’m okay with mp3s as long as the bitrate is high enough. I normally just buy mp3s from Amazon Music. Don’t expect to hear quality audio from low-bitrate mp3s, though. The compression is too lossy.
Digital-to-Analog Converter (DAC)
Chances are you probably listen to music from your phone and sometimes from your laptop like me. The problem is the converters in them that convert digital audio signals to analog signals are likely of low quality. I have the Google Pixel 4a 5G smartphone. It’s a mid-range phone. But even if you have a high-end phone, the digital-to-analog converter (DAC) is most likely not as good as a dedicated DAC. Fortunately, there are small Bluetooth DACs that are lightweight and can clip onto your shirt. I tested the EarStudio ES100 MK 2 ($60 renewed, $80 new on Amazon).
When comparing the audio quality with and without this DAC, it’s clear that the DAC makes a decent, if not big, difference, depending on the song I’m listening to. The DAC is also an amplifier and can increase the volume to levels higher than I’d ever need it to be. It didn’t come with an aux cable, so I bought a short 4-inch one. The setup might seem complex, but it’s not that bad, especially if you’re just sitting for a long time, like on a long flight.
Instead of pairing your head/earphones to your audio source (phone, laptop, etc), you pair the DAC to it.
Though it has volume controls, I find it easier to adjust the volume from the phone app. It’s recommended to set the source volume (phone or laptop volume) to max and to adjust the analog (DAC) volume. The app has a lot of options and clear explanations, but I find the default settings to be sufficient.
Many website files include PDFs. These PDF files are usually much larger than other file types and can take up a lot of space. You may want to keep all website files like images and PDFs (binary files) together with your HTML, CSS and JS files (text files) and put them all in version control, like GitHub, but there are downsides to this:
Git version control is designed for text files, not binary files. Even though you can use Git LFS so you can version your binary files, there are simpler, better alternatives.
Website images are better served from an image CDN like Cloudinary or ImageKit. These services will automatically and quickly optimize images on the fly.
PDF files are better served from a CDN. Amazon AWS S3 can be used to store your PDFs with versioning and AWS CloudFront can serve those PDFs from a CDN. With CloudFront, you can also write a function to redirect one PDF file to another in case you need to delete a file.
The steps below describe how to set up AWS S3 and CloudFront to host PDFs and to set up redirects.
Note: you can create redirects using AWS Lambda functions (launched in 2017), but they are more complicated and cost 6 times as much as the cost of CloudFront functions (launched in 2021). Learn more.
1. Create an S3 bucket
Log in to the AWS console, go to S3, and click “Create bucket”. Choose a bucket name like “pdfs”.
Since you want people to be able to access the PDFs, uncheck “Block all public access” and check “I acknowledge that the current settings might result in this bucket and the objects within becoming public.”
If you want, click the radio button that enables versioning
Ignore the other options, if you want, and then click the “Create bucket” button.
2. Upload PDFs
You can drag and drop your PDFs to upload them. If you have many PDFs, like thousands, then it’s better to use the AWS CLI S3 Sync command.
As a test, I just uploaded 2 PDF files/
3. Create a CloudFront Distribution
In the AWs console, go to CloudFront and click “Create Distribution”. For “Origin domain, choose the Amazon S3 bucket you created in step 1.
For the viewer protocol policy, choose “Redirect HTTP to HTTPS” since that’s a good policy IMO.
Ignore all other options, if you want, and click the “Create Distribution” button.
Now, the PDF files in your S3 bucket will be available in a CDN at the CloudFront domain provided, e.g. d2a5k3j4u1zr32.cloudfront.net/test-pdf-1.pdf
4. Create a CloudFront Function to Redirect Requests
Click on the distribution and then click on “Functions” in the left sidebar.
Click the “Create Function” button and enter a name for the function, e.g. “Redirects”.
You will see 3 tabs: Build, Test, and Publish.
In the “Build” tab, enter the code below and customize as needed.
Note that there is a 10 KB limit on the size of your CloudFront function.
Click the “Save Changes” button and then click the “Test” tab. You will see a field labeled “URL Path” with a default value of “/index.html”.
Since we don’t have a redirect rule for that URL path, we don’t expect any redirection to happen. Click the “Test Function” button. You will see output like below indicated that the response URI is “/index.html” as expected.
Now, change the URL path to one you have a redirect for. In my example code, I am redirecting “/test-pdf-2.pdf” to “https://www.google.com”. Click the “Test Function” button. The output shows “https://www.google.com”.
Now, publish the CloudFront function. Click the “Publish” tab, then click the “Publish Function” button.
Click “Add Association” to associate the function to your distribution. Choose your distribution in the Distribution field. Leave Event Type as “Viewer Request” and ignore Cache behavior. Click the “Add association” button.
Note that you can only have one CloudFront function for a given cache behavior and event type.
Wait for the function to be deployed. Go back to the function list page and check the status column. It will say “Updating” for a few minutes.
Wait a few minutes. Reload the page. The status should change to “Deployed”.
Now, test out the redirect in production by going to the CloudFront URL of a path you have a redirect for. You should see the redirect work.
Using Lambda Functions
Make sure the location is set to us-east-1.
Go to the Lambda page and click “Create function”.
Enter a name for your function.
Under “Execution Role”, choose “Create a new role from AWS policy templates”
Enter a role name
Under “Policy Templates”, choose “Basic Lambda@Edge permissions (for CloudFront trigger)”. This is IMPORTANT. Do NOT choose “Create a new role with basic Lambda permissions”.
In the “Code” tab, enter the redirect code below and then click File > Save.
In order to test your code, you must deploy it first. Click the Deploy button.
Test your code by clicking the “Test” tab
Choose “Create new event”
Enter a name for the test
Replace the event JSON with relevant test data, e.g.
Click the “Save” button and then the “Test” button.
You will either see an error or a success response similar to what’s shown below.
Under “Actions”, click “Deploy to Lambda@Edge”. This will deploy the Lambda function to the CloudFront edge network.
Choose your CloudFront distribution from the dropdown list.
For CloudFront event, choose “Origin Response”.
The green banner will state that the function is being replicated, but that it will take a few minutes to complete.
Go to the CloudFront distribution. You’ll see the status “Deploying”. Wait till it changes to a date/time indicating the deployment has completed.
Invalidate the CloudFront cache for all objects using /*
When the trigger is created, it will create a new Lambda function version. Click on the “Versions” tab and then click the version number to see that the trigger is saved in the version.
You will then see the CloudFront trigger in the diagram and other saved details.
Test the redirect using the cURL command.
If you need to remove a Lambda function from a Cloudfront distribution,
go to the distribution
click “Behaviors”
choose a behavior and click “Edit”
Scroll down to “Function Association” and select “No association” for the function type
Click “Save changes”
Invalidate the Cloudfront distribution using /*
Put Redirect Data in an External JSON File
The instructions above work, but whenever you want to update the redirects, you have to edit the lambda JavaScript function and redeploy it to the Cloudfront edge. The deployment process takes about 5 minutes. To improve this process, we can move the redirect data to a JSON file in an S3 bucket. Then, you can just upload an updated JSON file, overwriting the existing file, and the updated redirects will work immediately. Here’s how to do that.
Create a JSON file containing all redirects like the following and upload it to S3.
Add permissions to the lambda function to have read access to S3. Go to Lambda > Functions > and click on the function name. Then, go to Configuration > Permissions > Execution Role > and click on the role name.
A new tab containing the role’s permission will open. Under “Permissions policies”, click on the policy name.
That will open a new tab showing the permissions defined in the policy. Click the Edit button.
A new table will open showing the existing permission. Add the following S3 permissions. Replace “mybucket” with the name of the S3 bucket where you put the JSON redirect file.
Click “Deploy” so you can test the lambda function. Once you verify it is working, go to Actions > Deploy to Lambda Edge. Follow the remaining steps as shown above.
Adding UTM parameters to links is useful for tracking marketing efforts, e.g. if you have a banner or an email with links to a landing page, you’ll want to know which method (banner or email) generated the most page visits and form fills. Google has a campaign URL builder that will generate URLs with UTMs for you. In Google Analytics, you can find pageviews to the landing page by UTM parameter. However, if you want to track any subsequent pages after the landing page, then you’ll need a way to pass the UTMs along to the subsequent pages. In my particular situation, I needed to pass UTMs to a 3rd-party site. The visitor flow would be like this
Click a banner on the home page of example.com. The banner has UTMs in the query string, e.g. example.com/landing-page?utmsource=home-page-banner
Land on an overview page on example.com, e.g. example.com/landing-page
Maybe visit other pages on example.com
Return to example.com/landing-page
Click a link to register for something on a 3rd-party site, e.g. foo.com/register
By default, only the first pageview of example.com/landing-page would include UTMs in the URL. To pass the UTMs to the link to the 3rd-party site, something extra needed to be done. I chose the following approach, which works well.
Write JavaScript code that runs on all pages.
If a URL contains UTM params, save the UTM name/value pairs as session cookies, overwriting any existing UTM cookies.
If a page has any <a> tags with the class “appendUTM”, then rewrite the href value by appending the UTM params.
I then added the class “appendUTM” to any links where I wanted to append the UTMs. In my case, it was the links to the 3rd-party registration site.
I recently had to move 35,000+ website images from Git to AWS S3. The images were in many subfolders. First, I had to separate the images from all other files. Then, when I tried dragging and dropping the parent folder containing all images to the AWS S3 web interface, I had to wait 9 to 17 hours.
When I woke up in the morning, I found the upload completed with errors:
Here’s how I easily separated the images from all other files and successfully uploaded all 35,000+ images.
Separate images from other files
First, I wanted to see a list of all unique file extensions so I could know what image file extensions were being used.
find . -type f | sed 's|.*.||' | sort -u
This returned a list like the one below.
JPG PNG ali bmp brs cnd CSS ...
Then, I copied the website root folder and made a new sibling folder called website-images where I’d just have the images.
Then, I deleted all images from the “website” folder using the following command.
As mentioned earlier, uploading 35000 images to S3 using the web interface took a long time and kept completing with errors. What ended up working was uploading the images using the AWS CLI. Here’s how I did it.
I had to create an access key to authenticate. I created a new Identity and Access Management (IAM) user and then clicked the “Create access key” button to generate a new key.
I then saved those key values as environment variables. Here are the instructions. I basically ran the following commands in the terminal, replacing the values with my actual values.
For the default region, I chose the region for my S3 bucket.
Upload (sync) files
I then uploaded (synced) files from my local to my remote S3 bucket. Here’s the documentation for the S3 sync command. Since I had already uploaded some files, I was hoping to find a flag to skip uploading files that exist at the destination. It turns out that the “sync” command does this by default. I ran the following command in dry-run mode to verify the output was correct.
Then, I reran the command without the dry-run flag.
aws s3 sync . s3://q-website-images/docs/
The command output a list of the files it uploaded.
When it was done, I tried rerunning the command only to find that it completed with no output, indicating that all source files already existed in the destination. That was a sign that the sync was complete. Looking at the number of files in the S3 web console, I could see the correct number of files listed there.
Now that the images are in S3, I’ll use S3 as the origin for an image CDN (ImageKit). ImageKit will auto-optimize the images.
For me, my maintenance calories is currently 2650 calories per day.
Step 2: Calculate Calories & Protein to Lose Weight and Build Muscle
Losing Weight (Fat)
In order to lose weight by losing fat, you just need one thing: a net deficit of calories. But you don’t want too large a deficit because then you’ll lose both fat and muscle. You should target a deficit of 5 to 10% of your maintenance calories. You can lose weight by just
consuming fewer calories without exercising
consuming more calories but burning extra calories by doing cardio exercises like running
Whether you just rest or you exercise, your net calorie deficit should be 5 to 10% of your maintenance calories. For me, this value is currently between 2385 and 2517 calories.
Gaining Muscle
In order to gain muscle, you need 4 things:
a net surplus of calories
strength training until failure
sufficient protein consumption
rest (minimum 7 hours a day)
For the calories, you don’t want too large a surplus because then you’ll gain both muscle and fat. You should target a surplus of 5 to 15% of your maintenance calories. For me, this value is currently between 2782 and 3047 calories.
For the protein, you should target consuming 1 gram of protein for each pound of body weight. So, if you weigh 180 lbs, you should consume 180 grams of protein.
The calorie (energy / fuel) surplus is needed to rebuild the muscle you’ve broken down during strength training. Breaking down muscle fibers only happens if you train to failure. The large protein consumption is needed because muscles are made of protein. Muscle (protein) synthesis occurs while you’re sleeping, which is why it’s necessary to sleep enough after strength training.
Your weekly schedule would be a combination of resting days, cardio days, and strength training (weight lifting) days. Here’s an example.
DAY
ACTIVITY
CALORIES
Monday
Rest
Calorie Deficit, Extra Protein
Tuesday
Strength Training
Calorie Surplus, Extra Protein
Wednesday
Cardio
Calorie Deficit, Extra Protein
Thursday
Rest
Calorie Deficit, Extra Protein
Friday
Strength Training
Calorie Surplus, Extra Protein
Saturday
Cardio
Calorie Deficit, Extra Protein
Sunday
Strength Training
Calorie Surplus, Extra Protein
For strength training, you need to wait at least one day in between working the same muscle group, e.g. don’t do chest presses every day. Do them at most every other day because muscle protein synthesis (MPS) takes 36-48 hours on average and working the same muscles during that time will interfere with synthesis.
Step 4: Make a Meal Plan
When it comes to losing weight, you just need a calorie deficit, but you should consume healthy calories, e.g. no processed food, no added sugar, etc. For me, I try to stick to a keto diet, although that’s not absolutely necessary.
When it comes to building muscle, the hardest part will be trying to consume sufficient protein. If you weigh 180 lbs, you need to consume 180 grams of protein. That’s actually hard to do, which is why many people consume protein shakes to supplement their meals.
Here’s a list of protein-dense foods that can help you reach your protein consumption target.
Since the hardest thing is consuming enough protein, the meal plan below will focus on foods that will hit the target protein amount of 180 without consuming an excess of calories. If there is a calorie deficit, you can easily add any kind of healthy food to reach the calorie target.
For cardio, you can do anything from hiking, dancing, running, biking, etc. If you’re low on time, you can buy a recumbent exercise bike with resistance. It lets you lay back and exercise in a comfortable position. The one below is lightweight and small and costs $178. You can easily put it in your living room and use it while watching TV.
Another low-intensity option is to simply walk. A common goal is to target 10,000 steps per day, which is about 5 miles. You can also walk at home while watching TV. Some walking pads can easily be stored and don’t make a lot of noise. This one, for example, comes with the following features
optional 3% incline
low 45 dB noise
remote control
large display
belt dimensions: 17″ x 48″
overall dimensions: 27″D x 50″W x 5″H
supports Zwift and Kinomap
Speed: 0.6-7.6 mph (~1350 – 17000 steps)
foldable
Strength training
For strength training, you should do the following:
For each set, do as many reps until failure (you can no longer complete a full rep)
Periodically increase the weights (progressive overload)
Ensure you feel stimulation in the target muscle. If you don’t, then you may be doing the exercise wrong and you will see limited results. Some call this the mind-muscle connection.
When it comes to building muscle, what matters most is volume. For example, both of the following will produce the same results.
Weight (lbs)
Reps
Sets
Total Volume
100
5
3
1500
50
10
3
1500
Accessories
While working out, I’ve found the following accessories helpful.
Playing certain types of music can be motivating and make exercising more enjoyable. Many people wear bulky on-ear headphones. I prefer in-ear neckband earphones because they don’t move around and are lightweight. They also block out ambient noise pretty well. I wear the Sony Wireless Behind-Neck Headset (WI-C400).
Workout gloves
If you don’t wear padded gloves, you can easily develop calluses (thickened skin that forms as a response to repeated friction or pressure). Lifting weights is much more comfortable while wearing padded gloves.
Step 6: Count Calories
For calorie consumption, you can count calories by adding up all calories for each ingredient or food you consume. Look at the nutrition label on food packaging and/or look at online calorie databases.
To see how inaccurate a smartwatch measures calories burned, today I used both my Fossil Gen X watch and the Google Fit watch app to track calories burned. I also used the Polar H10 chest strap. I did strength training for 1 hour and 10 minutes. When I started tracking on my watch, I chose “indoor workout,” and the phone app just started tracking calories, time spent, heart rate, etc. When I started tracking using the Polar H1 app on my phone, I was able to choose “Strength training” before the device started tracking vitals. Once I was done exercising, I stopped both apps. As you can see below, the smartwatch says “Run”, which I guess means it thought I was running on a treadmill. It also says I burned 482 calories. In the Polar H10 app on my phone, it says I burned 759 calories. That’s way more than 482, with a difference of 277 calories. While I was exercising, I had my Bluetooth earphones on. The Polar H10 app would send an audio message like “You are improving your fitness” or “You are burning fat”. It would say the former when I was doing strength training and the latter when I was resting.
Step 7: Measure Progress
Weight Loss Progress
Measuring your weight loss is easy. Just regularly weigh yourself. To automate this, buy a Wi-Fi scale that records and keeps track of your weight and shows a graph of your progress on your phone. I personally use the Withings Body – Digital Wi-Fi Smart Scale with Automatic Smartphone App Sync. If weighing yourself every day, make sure to do it right before bed or first thing in the morning for more accurate results.
Muscle Gain Progress
To track your muscle gain, you’ll need to track your strength training weights, reps and sets for each exercise. Personally, I log my workouts using the free version of the FitNotes app. It’s a simple and easy-to-use app that just works. I can easily see my most recent reps and weights so I can either match or exceed them.
If you are able to lift heavier weights and perform more reps, then you must be building muscle, even if it’s not immediately noticeable in the mirror. You can also try measuring the circumference of different parts of your body, e.g. your upper arm, but that’s a hassle and inaccurate if you measure right after a workout when your muscles are swollen.
Over time, you can compare your strength training limits to see progress. Below is an example showing my actual results.
Google Analytics version 4 (GA4) is quite different than the previous version, called Universal Analytics (UA). GA4 is event-based, and the UI is quite different. If you’ve got a link with UTM parameters like
In GA4, if you go to Reports > Engagement > Pages and screens, you will see stats like pageviews for many pages. You can then filter to just one page like a free trial page by entering the page’s path in the search field, e.g. “/free-trial/”. You can then add a secondary dimension for source and medium. What you’ll end up will be something like this
This may not include the source and medium in your UTM parameters. A better way to get the traffic report based on a specific source and medium or name is by going to Explorations.
Here, you can create a new exploration. In the left “Variables” column
give the exploration a name like “Feb 2023 Campaign”
add some dimensions like
Page path and screen class
Session campaign
Session source / medium
add some metrics like “Views” and “Sessions”
In the middle “Settings” column,
drag some or all dimensions from the left column to the “Rows” field
drag some or all metrics from the left column to the “Values” field
add some filters like
Session source / medium contains market
Session campaign contains “Feb 2023 Campaign”
You will then see the report on the right.
Here’s the mapping between UTM query parameter and UTM dimension in GA4.
To find the number of clicks on a link with a UTM, go to
Reports > Acquisition > Traffic acquisition
In the primary dimension, choose session source or session medium or session campaign
In the Search field, enter a value for the session source or session medium or session campaign
Choose a date range
Scroll to the right and under “Event count”, choose “click”.