Complete 2 BR, 1 BA Apartment Renovation & Kitchen Remodel

I just finished renovating an entire 2-bedroom, 1-bathroom apartment and totally remodeled the kitchen from a U layout to an L layout with an island. Here are some before and after pics and step-by-step pictures showing how I did it.









Here’s how I renovated the apartment step by step:

Removed all doors

The doors were all beat up so I replaced them with new ones.

Removed fixtures

Replaced all outlets with Decora outlets

For the kitchen and bathroom, use 20 amp outlets, otherwise, use 15 amp outlets.

Removed HVAC registers and grills

All HVAC registers were beat up so I replaced them all.

Removed all baseboard

To remove the baseboard, first, cut the caulk using a utility knife. You can also use an oscillating tool.

Then, I like to use a mallet and a special tool that makes it easy to pry the baseboard away from the wall. It has a large surface area to minimize damaging the wall as you pry the baseboard off.

Most of the time, you can reuse the baseboard. But in this case, mine was so beat up that it wasn’t worth it. Plus, for a rental property, it’s better to install a tile baseboard.

Ran new wiring for a ceiling fan

First, I made holes in the wall and ceiling between studs and joists using a 4″ hole saw. I then inspected the area behind the wall and ceiling to ensure no obstacles were present. It there were obstacles, I could easily patch the holes using the circular cutout pieces.

I then ran yellow romex wiring. Yellow wiring can support 20 amps. I could have used a higher gauge (thinner, lower 15 amp-rated) wire since this is for a ceiling fan in a bedroom.

Where the ceiling fan would go, I cut a rectangular piece of drywall using a small reciprocating saw. I could have used a jigsaw as well. The cut was made in such a way so that I could reuse the piece to patch the ceiling when done.

After installing a ceiling fan bracket between joists, I pulled the wiring to the bracket.

I then wired up the switch…

…and patched the ceiling using the existing drywall.

For the circular holes, I patched them using the circular drywall cuts created when making the holes. I screwed a piece of furring strip behind each hole as pictured.

And then screwed the circular drywall cuts to the furring strip.

Demolished the bathroom vanity

The vanity top was made of cultured marble. I just broke it into small pieces using a sledge hammer.

I then cut up the wood vanity using a reciprocating saw and a demolition blade.

I removed the caulk on the wall using a oscillating tool following by an orbital sander.

Patched holes in the wall and replaced damaged drywall

In the kids’ bedroom, there were many holes in the wall. Some parts of the wall were patched very poorly. I decided to a large section of drywall. I tried using a drywall cutout tool but it was very noisy and it was hard to cut a straight line.

I ended up just using a reciprocating saw and oscillating tool to cut the drywall.

I screwed in the drywall using drywall screws.

I put mesh tape along the edges of each piece of drywall. This helped hold the drywall mud in place where there were large gaps.

For the drywall mud, I used premixed joint compound so I didn’t have to mess with mixing powdered drywall with water.

I then used an orbital sander to smoothen the mud. This produced a lot of dust, but that was okay because I was going to remove the carpet and paint the walls afterward.

Demolished the kitchen

To demolish the old kitchen cabinets, I first unscrewed and removed each cabinet door.

I hated the old kitchen layout. The half wall and ceiling cabinets made the dining and kitchen areas very small.

The ceiling cabinets can easily be removed by unscrewing them from the ceiling and wall.

I used the backyard to temporarily store all the construction debris.

I removed the heavy marble countertop by breaking it up into small pieces using a sledge hammer.

You should definitely wear a full face mask when doing this to prevent small objects hitting your eyes or face.

Just for fun, I used my 24V electric chainsaw to cut up the base cabinets.

After unscrewing some screws that fastened the base cabinets to the wall, I was able to pull out the cabinets.

To remove the pony wall, I drilled a bunch of 4″ holes in it so I could see if there was anything dangerous behind it.

I was then able to demolish it.

The 24V electric chainsaw was handy for quickly cutting some thick pieces of wood.

For safety, I hammered down any nails that were sticking out.

The wall was soggy because there was a small leak that was never detected. I had to cut out the soggy drywall so I could replace it.

Demolished old tile

To remove the old floor tile, I used a jackhammer with a chisel bit. Since there had been a leak in the kitchen, the tiles were easy to remove.

In the living room, however, it was a little harder to remove the tiles.

In general, separating the tile from the floor was easy.

What was difficult was moving the broken tile outside because it was heavy.

I put the broken tile in bags out front.

I first tried removing the thinset mortar using a scraper attachment on my jackhammer. But, that proved slow and very tiring…

… so I rented a heavy duty jackhammer and cart. This was much easier but still a lot of work. Note to future self: don’t ever do this by yourself. Just pay someone to do it.

Painted the ceiling and walls

I used painter’s plastic to cover large areas like windows. It’s a very thin plastic.

I sprayed glue around the perimeter of the window.

And stuck the plastic to the wall.

I removed excess plastic by trimming it off with a utility knife. Make sure to use a new blade.

I could then just peel off the excess plastic.

I did the same to cover outlets and switches, although I alter realized it would’ve been easier to cover small areas using blue masking tape.

You can then trim the excess tape with a utility knife so when you’re done painting…

…you can just remove the tape.

To paint the walls and ceiling, I used the Graco Magnum X5 Airless Paint Sprayer. Setting it up and cleaning it up was a hassle, but once it was primed and ready to go, it worked very well and made painting very quick and easy with good, even results.

I first painted primer on the colored walls since the colors were dark. I painted two coats.

Try to move quickly to avoid runny paint.

Painting ceilings is easy with a paint sprayer like this.

Once the primer dried, I painted the whole apartment. A fresh coat of paint really does make a big difference by making the place look new and clean.

But spray paint particles can really get on your face and glasses.

Dirty walls suddenly look new again.

Painting ceilings would have really been hard without a paint sprayer.

Removed carpet

Using a utility knife, I cut the carpet in 2 or 3′ sections.

I then rolled it and the underlayment padding up and strapped it from unraveling using duct tape.

I then removed the tack strip along the perimeter since I was going to install tile over the concrete.

Husky contractor clean-up bags are great for disposing of construction debris.

Using an angle grinder, I trimmed any tacks/nails that were stuck in the concrete.

Here’s a close-up.

Replaced all multi-turn water valves with 1/4-turn ones

I hate multi-turn water valves. I paid a plumber to replace them with 1/4-turn valves.

Installed tile

I bought 12″x24″ large tiles.

I paid someone to install the tile. First, they removed the tile around the electric fireplace.

Then they put cement board around the firstplace as backing for the tile.

They scraped the floor to remove any uneven spots from thinset.

They mopped the floor to remove excess dust.

They mixed the thinset and troweled it on the floor before laying down the tile.

I later noticed they were using the wrong type of thinset so I had them use thinset for large format tile (LFT).

For some tile, they’d cut it using a manual tile cutter.

They used little red plastic things to ensure adjacent files were level with each other.

I chose a terracotta color for the fireplace surround tile.

They applied the grout.

Then wiped it off the tile itself.

And mopped off any excess grout.

Patched kitchen wall

Before installing the cabinets, I had to patch the wall where there had been a water leak. I marked the stud locations using a stud finder.

Using a level, I drew lines where the studs were.

Sometimes, I’d cut drywall using a jigsaw.

Other times, I’d cut it by first scoring it using a utility knife…

…snapping it…

…and scoring the other side.

It’s actually easier and creates a straight cut with no dust.

I had to screw in some 2x4s to existing studs so I’d have a frame to screw the drywall into.

I dry-fitted the cut drywall panels.

And occasionally I’d have to mark edges that didn’t fit…

…so I could trim them using a rasp.

I screwed the drywall into the studs using drywall screws such that the screw heads would be slightly recessed so they wouldn’t be seen after patching with drywall mud.

I added mesh tape along all seams/joints to hold drywall mud (joint compound).

Then I applied joint compound.

Rerouted kitchen exhaust

I had to cut open the ceiling and reroute the exhaust vent.

I removed the old rigid vent.

And installed a flexible vent.

The exhaust went was moved to the wall above where the range would be.

Installed IKEA kitchen cabinets

IKEA delivered the kitchen cabinets.

To install the wall cabinets, we had to fasten metal brackets to the wall, sometimes using drywall anchors. We also had to cut some of the brackets using an angle grinder.

IKEA cabinets come flat-packed and must be assembled.

Fastening wall cabinets to the wall is easy because you can hang them on the bracket and adjust their position before finalizing where they’d go.

The base (floor) cabinets/drawers come with short plastic legs. This is good so that if the floor is wet, the wooden cabinets wouldn’t get wet.

I decided to run additional wiring to a new switch to control a new ceiling fan I planned to put in the kitchen.

We cut a hole in one of the wall cabinets where the exhaust vent would go.

All IKEA cabinet boxes are white. For end cabinets werhe a side will be exposed, we screwed a finished panel to the side.

We installed the over-the-range microwave.

And then attached the cabinet doors.

We screwed in the door handles and attached the kickboard.

Installed quartz kitchen countertop

For IKEA kitchen cabinets, I had to cut 3/4″ thick plywood to put on top of the base cabinets. For non-IKEA cabinets, you can use 1/2″ thick plywood.

I screwed the plywood in through the metal holes at the top of the cabinets.

I decided to buy a new range because the old was in very bad condition.

I bought the quartz countertop from Granite Expo and paid them to install it. In the picture below, they cut the quartz and sanded the edges.

Cutting quartz can produce a lot of dust.

The inside edges were also smoothened.

One guy cut a hole in the plywood for the sink. I decided to go with an undermount sink. The lip of the sink would sit on the plywood but below the countertop. The would ensure the sink would stay in place.

They also made a hole in the countertop for the sink. Like marble, quartz countertops are very heavy.

They put construction adhesive on the plywood before laying down the countertop.

The corner seam between the two adjacent countertop slabs was straight, not diagonal. Getting the two slabs to be perfectly level with each other was tricky. The guy screwed a screw up from under and through the plywood to push up areas of the countertop so it would be level with the adjacent slab. The other guy was applying silicone caulk around the inside edge of the sink.

One of the guys was smoothening and polishing one cut end of the backsplash.

They glued the backsplash to the wall.

They were nice enough to clean up after themselves.

Installed a new range

Unlike other appliances, I had to install the range plug by screwing it to specific terminals on the range.

I decided to replace the 220V outlet with a new one. I turned off the circuit breaker first.

Installed kitchen sink plumbing

I first secured the sink to the countertop by turning a large plastic piece. No special tools were required.

I then screwed the hot (left) and cold (right) water supply lines to the new 1/4-turn valves.

I made a bead of plumber’s putty…

…and put it around the sink hole…

…and then put the sink strainer on it. The plumber’s putty helps prevent leaks.

I then secured the sink strainer by screwing it to a complementary part underneath the sink.

The black PVC drain pipe stuck out too far so I cut it. After installing the garbage disposal, I applied PVC glue around the pipe…

…and inserted a threaded coupling to it.

I then connected the garbage disposal outlet to the drain inlet coming out of the wall. I hate fooling around with PVC so this time, I used flexible p-trap by SimpleDrain. It comes

It’s so much easier to install than PVC p-traps. Instead of screwing on flimsy PVC nuts, SimpleDrain uses an adjustable metal clamp.

This is what the old kitchen looked like.

And this is the new. One of the cabinets was missing when I took this photo. As you can see, remodeling the kitchen with a new layout really makes the kitchen feel bigger.

Replaced kitchen lights

I decided to replace the kitchen and dining room ceiling lights.

Installed bathroom vanity

I bought a gray vanity to match the gray kitchen cabinets. I had to assemble the vanity.

Without the countertop, it was lightweight.

It actually took a long time to assemble. After assembling the frame and installed the 2 doors, I had to assemble 4 drawers.

Once that was done, I could install the heavy countertop by first applying a bead of glue to the top perimeter of the vanity frame…

…and to the wall where the backsplash would go.

I like this countertop because the sink and backsplash are integrated making installation easier and minimizing leaks.

Repainted the ceiling and walls

So, I messed up. When I painted the ceiling and walls, I chose a color that looked good in a certain light but not in others. In the evening, and in soft white lighting (slightly yellow), the walls appeared to have a blueish hue to it. It made the rooms psychologically feel a bit cold and that drove me crazy. I decided to repaint the ceiling and walls. But, this time it was hard because I had to be careful not to get paint on the new tile and kitchen cabinets.

The new color I decided on was

  • Hazelnut Cream 750C-2 (Eggshell) from Behr (Home Depot)
  • This is equivalent to Lowe’s Valspar “Cream in my Coffee”.

This color is neutral and perfect.

I taped some masking paper to the top of the tile baseboard.

I covered the floor with a large drop cloth and covered the kitchen cabinets with large plastic and cardboard. Notice the difference in the ceiling color.

Preparation takes a long time but spray painting is quick and easy.

It’s hard not getting paint on yourself. My glasses and watch had many paint specks on them.

I then had to go back and paint some missed areas.

It’s always satisfying, though, to remove masking tape to reveal the finished product (as long as the masking tape doesn’t rip and can easily be pulled off).

I was too lazy to texture part of the wall above the backsplash. It’s not that noticeable though.

Installed new ceiling fans

Now that I was really done painting the walls and ceiling, I installed the ceiling fans in each bedroom.

Yay! It works 🙂

Painted the garage walls

I had unpainted garage walls. The builder would just install drywall and patch holes but that’s it. I ended up painting the walls plain white (the color of primer).

I hate painting ceilings.

Having an extension pole allowed to reach high areas.

Resurfaced the garage floor

The garage floor was heavily discolored and looked dirty. There were all sorts of stains. To beautify it, I first sprayed water on it.

Then, I used a orbital floor polisher tool with a floor prep attachment. This attachment has a bunch of very coarse tabs like rough sandpaper. It etches the surface and scratches the hell out of it. The tool tends to want to move to the right all the time so you need to force it to stay put or go left. It’s way better than using chemicals like muriatic acid.

When I was done etching the garage floor, I pressure washed it and let it dry overnight.

The next day, I applied 1-part epoxy along the perimeter. The specific epoxy I used was Behr 1 gal. Slate Gray Self-Priming 1-Part Epoxy Satin Interior/Exterior Concrete and Garage Floor Paint. We’ll see how long it holds up. Another option was to use Behr Granite Grip but that’s a lot more work to apply.

This epoxy is like a primer. When you roll it on, it easily covers up any discoloratino. Two coats may be needed. It’s very satisfying to easily transform an ugly garage floor into one that looks brand new. Plus, painting a floor is much easier than painting a wall or ceiling. The color of the epoxy looks almost like untinted concrete.

When the epoxy dried, I installed a LED shop light with motion detection.

In one of the other garages (the triplex has 3 garages), I tried applying Behr Granite Grip. Not only is Granite Grip more expensive, I had to use a texture sprayer connected to an air compressor to get good results.

I then had to use a texture roller to even out the material. The results were good but not worth the time, effort and cost for a rental property.

Resurfaced the backyard concrete

The tenants I kicked out had a dog they never cleaned up after. There was dog shit everywhere. When they left, they removed the large pieces but the concrete was still discolored by dog shit that baked in the Stockton, California sun and permeated into the porous concrete. This was brand new concrete that I had put in the year before. Pressure washing with a high-PSI commercial pressure washer was inadequate. I decide to apply the same treatment I applied to the heavily stained garage floor. In this photo, I was etching (scratching) the surface.

I then pressure washed the concrete.

After the concrete dried, I applied epoxy to the joints using a wide paint brush.

And then I rolled on epoxy to the rest of the concrete.

Landscaped the dirt by the fence

When I had the concrete put in, I didn’t want it to go all the way to the fence for drainage purposes. But, if you leave dirt along the fence, you’ll end up with a jungle of weeds, which is exactly what happened. To fix this, I first took used my jack hammer to break up concrete from old fence posts.

I bought a PVC pond liner, which is 14.5-mil thick, and cut it a little longer than some 8-foot-long 2x4s.

I stapled the liner to the 2×4.

I made some holes in the 2×4 and hammered in some long galvanized stakes to hold the wood in place along the edge of the concrete. The pond liner covers some of the dirt. Along the fence, I stapled some pond liner that also covered some of the dirt. In between and overlapping the two pond liner pieces, I put cement board. This will prevent weeds from growing while still allowing water to drain.

Finally, I powered 3/4″ ginger rock to keep everything in place and for aesthetics.

Disposed of all construction debris at the dump

To get rid of all construction debris, I cut up some things into small pieces and put all small garbage in clean-up bags.

I rented a box truck from Home Depot, loaded garbage into a 4-wheel cart, and used it to move junk to the truck.

The process worked very well. Luckily there was a ramp.

At the dump, I threw everything off the edge of the platform like the toilet…

…and the old doors.

Periodically, a huge bulldozer would come and push all the garbage away.

I had to clean the truck to avoid a cleaning fee.

Dumping the many bags of broke tile was extremely tiring. I’ll make sure to pay someone to do that next time.

I paid about $150 to the dump to dispose of a truck-load full of garbage and around $50 for the truck rental.

Form Backends for Static Websites

If you’re getting on the Jamstack bandwagon, you’ll probably get to a point where you need to figure out a way to handle web forms. That’s what happened to me when I migrated from WordPress (PHP) to static HTML. I needed a way to handle my contact form. Fortunately, there are many form backend services like

After reviewing each one, I find KwesForms to be the best, but to have one of the worst costs because it’s one of the most expensive.

At $29 / month, that’s cheap for a company but more than I would want to pay for a personal blog. There is a free version but it has some limitations and has the KwesForms logo on confirmation emails. Anyway, KwesForms has the best features, what super easy to integrate, includes form validation, custom redirects, clear documentation, and more. You can view and edit form data and export it all as a CSV file.

Since I don’t want to pay $29 / month for a contact form, and since I’ll be hosting my new blog on Netlify, I’m just going to use Netlify Forms. It’s not as user-friendly and feature-packed as KwesForms, which is to be expected since Netlify specializes in static site hosting, not form handling, but it’s free (up to 100 submissions per month). However, unlike KwesFroms, which comes with form validation, I’ll have to add my write my own form validation code. Instead of reinvent the wheel, I’ll use .validate, a jQuery validation plugin.

As you can see from their website and the video below, it’s dead simple to use.

Website Speed Comparison: WordPress (PHP) on GoDaddy vs Static HTML on Netlify

I’m in the process of migrating this blog from a managed WordPress instance on GoDaddy to a static HTML site on Netlify. Before I switch over the domain, I wanted to compare the Google Lighthouse performance scores for each site. In Google Chrome Developer Tools, I clicked the Lighthouse tab and ran a test for each site. Here are the results.

Performance score for WordPress (PHP) version of site on GoDaddy

Performance score for static HTML version of site on Netlify

Now, you might be thinking, why would the PHP site get a slightly higher score than the static HTML site? The static site has a lower cumulative layout shift score (see definition below). This factor has nothing to do with PHP vs HTML or GoDaddy vs Netlify. This factor has to do with how elements on the page shift their position. The original theme in the WordPress site came from one developer and the theme in the static HTML site came from another developer who recreated the original theme. This tells me that the original theme was coded better than the recreated theme. Since I’m more concerned with speed rather than layout shift, we can see that the static HTML site on Netlify is much faster than the PHP site on GoDaddy. This is to be expected. If we add up all scores except for the Cumulative Layout Shift score, we get

  • PHP on GoDaddy Performance Score: 3.9 s
  • HTML on Netlify Performance Score: 1.3 s

The new site performs 3x faster than the old one! That’s a speed gain of 300%!

First Contentful Paint

First Contentful Paint marks the time at which the first text or image is painted. Learn more.

Time to Interactive

Time to interactive is the amount of time it takes for the page to become fully interactive. Learn more.

Speed Index

Speed Index shows how quickly the contents of a page are visibly populated. Learn more.

Total Blocking Time

Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. Learn more.

Largest Contentful Paint

Largest Contentful Paint marks the time at which the largest text or image is painted. Learn more

Cumulative Layout Shift

Cumulative Layout Shift measures the movement of visible elements within the viewport. Learn more.

Virtually Stage a Room

I just finished renovating one of my rental apartments. I took a bunch of photos and, though the apartment looks nice, it looks extremely plain and uninviting without furniture. Some people have a good imagination and sense of design and can visualize what a room could look like with furniture the right furniture, but most people are clueless when it comes to interior design. I definitely don’t want to spend a lot of time, money, and energy paying a professional stager to come and bring real furniture to my apartment. Fortunately, there are online services where you can pay companies (or individuals) to virtually stage photos of your rooms for you. Or, you can use one of many DIY websites where you can virtually stage your rooms yourself.

After doing some research, I came across Apply Design. They charge up to $10 per photo. You can try it for free on one photo. So, I gave it a try and here’s what I came up with.

Living Room When Occupied by Tenant

The photo is distorted because I used a 360-degree camera placed in the center of the room. To show more of the room, I had to zoom out which made the walls look wider or narrower.

Living Room Right After I Kicked Out My Inherited Tenant

Again, the photo above is distorted.

Living Room After Renovating It

The photo above is the one I uploaded to Apply Design.

Virtually Staged Photo (Before Rendering)

This is how the living room looked after I drag and dropped furniture and design elements onto the previous photo but before rending the objects.

Virtually Staged Photo (After Rendering)

This is the final, rendered version of the photos. As you can see, it not only looks realistic, but it looks way more attractive and inviting than the empty room. When you compare it to the pre-rendered version, you see much more detail, shadows and vibrant colors.

How it Works

Virtually staging a room is actually very easy. Here are the steps using Apply Design.

  1. Upload photos
    Apply Design will take a few minutes to analyze each photo. I think it’s trying to determine where the walls are and the depth of field.
  2. Drag furniture and interior elements
    You can search or browse for furniture and then drag them to your photo. You can edit each object by moving, resizing, rotating, etc.
  3. Render a photo
    Rendering a photo takes around 5-10 minutes.

Overall, I think this is a great way to improve your home sale or rental potential.

Other Examples

Bedroom when occupied by tenants
Bedroom after (necessarily) renovating it
Bedroom after virtually staging it
Master bedroom when occupied by tenants
Master bedroom after (necessarily) renovating it
Master bedroom after virtually staging it
Before
After virtual staging

11ty: Ways to Debug Data

I’m in the process of migrating this blog from Managed WordPress on GoDaddy to Eleventy, GitHub and Netlify. Since I like the convenience of writing content in WordPress, I decided to continue to use it, but just as a headless CMS. When 11ty builds the site, it would fetch WordPress post, page, category, tag, and author data and, using the eleventy-fetch plugin, cache the data locally for a customizable period (I chose 1 day). Since Netlify automatically triggers a build when it detects a commit or push to GitHub, an automated build only happens when I make changes that are tracked by git and not changes in WordPress. For WordPress changes that I want published, I would manually trigger a build in the Netlify admin panel.

During this migration project, there were coding bugs that needed to be fixed. Following are some of the ways I discovered helped me to debug in Eleventy.

Debugging data in JavaScript files in the _data folder

As mentioned above, my project fetches data from WordPress to dynamically build pages. For example, I have a file at _data/authors.js that fetches data from the WordPress remote API endpoint, does some custom processing, and returns the data. It is often necessary to see if the data at different points of the code is as expected. To see this data, you can simply console out the data variable (see line 53 in the screenshot below).

When 11ty builds the site, the console.log statement will output the data in the console / terminal. However, f you are running the default 11ty build command, depending on how many files are being built (in my case, 11ty wrote 1015 files), the data dump may get truncated or lost in the console output. To remove the noise and status messages in the 11ty output, enable quiet mode. Since I’m on Windows, I use the following command.

npx @11ty/eleventy --serve --incremental --quiet 

Now, the output is much simpler, and I can see the data dump immediately.

Debugging data in template files

If you’d like to view the value of data variables in template files, you can do that by outputting the value and passing it to the log function (see example on line 9 below). This will tell 11ty to output the data to the console / terminal.

Dumping all data to a built page

Viewing data in the console terminal is handy for some situations. But, sometimes you can have a lot of JSON data that you’d like to see. In this case, it can be easier to dump the data to a page that you can view the entirety of in a file or at a URL To do this, first add a filter with the following code to .eleventy.js.

eleventyConfig.addFilter('dump', obj => {
    const getCircularReplacer = () => {
      const seen = new WeakSet();
      return (key, value) => {
        if (typeof value === "object" && value !== null) {
          if (seen.has(value)) {
            return;
          }
          seen.add(value);
        }
        return value;
      };
    };
  
    return JSON.stringify(obj, getCircularReplacer(), 4);
  });

Then, create a file to dump the data. In the example below, I have 2 files.

  • dump-posts.njk (to dump WordPress post data)
  • dump-pages.njk (to dump WordPress page data)
---
permalink: dump-post-data.json
---
{{ readyPosts.all | dump | safe }}
---
permalink: dump-page-data.json
---
{{ pages | dump | safe }}

Now, when 11ty builds the site, two pages are created at the following URLs.

  • http://localhost:8080/dump-page-data.json
  • http://localhost:8080/dump-page-data.json

Jakarta, Indonesia Trip 2024

Sat, Oct 26, 2024 – Mon, Nov 25, 2024

SUNMONTUEWEDTHUFRISAT
26
27 28 29 303112
3456789
10111213141516
17181920212223
2425

Saturday, October 26, 2024

7:30 AMDrive from Tracy to San Francisco Int’l Airport (SFO)
8:30 AMCheck in
FlightSQ 31
AirlineSingapore
Confirmation Number2ZAVWN
11:30 AMTake off to Singapore

Flight Duration: 16h 40m
Plane: Airbus A359

Sunday, October 27, 2024

7:10 PMLand at Changi International Airport, Singapore
7:10 PMGo to connecting flight

Layover in Singapore: 3 hours 30 minutes

FlightSQ 968
AirlineSingapore
Confirmation Number2ZAVWN
10:40 PMTake off to Jakarta

Flight Duration: 1 hr 35 min
Plane: Boeing 777-300ER

11:25 PMLand in Jakarta, Indonesia
12:00 AMDrive to Hania’s house

Jalan Sakatak lll No.47
RT 2 / RW 15
Abadijaya, Sukmajaya, Depok City,
West Java 16417
Indonesia

Food to Eat

Sticky sweet rice with shredded coconut

Sumedang Tofu

Bubur Kacang Ijo with Ketan and Santen

Sweet Martabak (مطبق)

Mutabak or Martabak is a street food that originated in southern Saudi Arabia and Yemen, and its name in Arabic (مطبق) means folded. It spread to Southeast Asia, including Malaysia, Indonesia, Singapore, and Brunei, where it is even more popular than in Arabia and has many variations, including a sweet and a savory version. The matabak that is found on the streets of Sanaa is usually an egg or cheese version, but you can add a variety of fillings. 

Savory Martabak

Es Kelapa Muda (Iced Young Coconut)

Es Teler

Nasi Goreng (NazGor) a.k.a. Indonesian Fried Rice

Sate Ayam (Chicken Satay)

Bakso

Es Teh Melati (Iced Jasmine Tea)

Putu

Lapis Legit

Roti Bakar (Toasted Bread)

ChillGo Portable Neck Fan ($28)

Buy on Amazon

Monday, November 25, 2024

2:00 AMDrive from house to airport
3:00 AMCheck in
FlightSQ 951
AirlineSingapore
Confirmation Number2ZAVWN
5:25 AMTake off to Singapore

Flight Duration: 1 hr 45 min
Plane: Boeing 777-300ER

8:10 AMLand at Changi International Airport, Singapore
8:10 AMGo to connecting flight

Layover in Singapore: 1 hour 10 minutes

FlightSQ 32
AirlineSingapore
Confirmation Number2ZAVWN
9:20 AMTake off to San Francisco

Flight Duration: 15 hr 20 min
Plane: Airbus A359

7:50 AMLand in San Francisco

Assembling a 12′ x 14′ Gazebo

Costco had this 12’x14′ gazebo on sale from $2099 to $1699 if you buy it in store.

The assembly instructions say you need 4 people to assemble it.

It turns out, I was able to assemble it with just 2 people by using the Rockwell RK9034 JawStand XP Work Support Stand.

Assembling the posts and beams was easy but time-consuming. It took one day.

The hard part was assembling the roof. Half a day was spent screwing in the aluminum roof panels. Another half was spent raising the roof up and fastening everything together. In the picture below, we used the Jawstand to hold a 2×4 piece of wood which supported the center peak of the roof. The Jawstand made it easy to adjust the height of the 2×4 since the angle of the roof had to constantly be adjusted to get all 4 roof panels to fit right.

Here’s the end result. Two days. Two people.

Strong, Waterproof Glue: Liquid Nails Fuze-It Max VS Loctite PL Marine

I wanted to find a glue that was simple to use, not too expensive, was very strong, and would maintain its strength in wet conditions. There are many glue options to choose from. I ended up choosing two popular brands: Liquid Nails and Loctite. For each brand, I chose either the strongest option or the option that was designed for wet environments. I didn’t include epoxy in my test because I didn’t want to mix two parts together and apply the mixture using a stick. Below are the two options I chose.

I first glued a piece of 2×4 to a concrete landscape block.

After waiting 1.5 to 2 days to fully cure, I attached each piece of wood to a chain to suspend the wood / concrete block combo in the air.

After 2 days, both adhesives kept the wood attached to the concrete block. I then wanted to see if water would affect the bond. I submerged each test in water without having it touch the bottom of the bucket of water.

LeftL Fuze-it | Right: PL Marine

After 12 hours, the wood pieces were still connected to the concrete blocks. But, after 23 hours, the Liquid Nails Fuze-It MAX lost its strength and the wood piece became disconnected from the concrete block.

Left: Fuze-It MAX, Right: PL Marine

So, the winner is Loctite PL Marine, although if you are gluing something in a dry environment, Liquid Nails Fuze-It MAX is probably sufficient. Unsurprisingly, the Marine adhesive is stronger both in dry and wet environments, including while being completely submerged in water.

How To Fix Open / Close Door Error on Microwave

I have the KitchenAid 1.9 cu. ft. Over the Range Convection Microwave in Stainless Steel with Sensor Cooking Technology microwave (model # KMHC319ESS).

Recently, the microwave would keep giving an error saying I needed to “open / close door” no matter how many times I open and close the door. This prevented me from microwaving anything. Since this was an expensive microwave, I didn’t really want to buy a new one. Fortunately, fixing this error was easy. It turns out that there is a sensor along the inside front bottom edge that detects whether the door is closed or not. I prefer to clean using wet Clorox disinfectant wipes. I find that they lift dirt up easily. I’d then wipe again using a dry paper towel. After doing that, the open/close door error goes away and the microwave can start.

Door sensor along inside bottom edge of microwave
Door sensor along inside bottom edge of microwave door
Cleaning the door sensor
Cleaning the door sensor

Although my microwave is a KitchenAid, apparently this happens to other microwaves as well.

Cable Management

I hate seeing lots of cables everywhere. In this post, I will list various options for managing and hiding cables.

Cord Covers / Cable Raceways

These are useful for hiding cables in a paintable conduit. The cable cover can be made of plastic or metal. Some have an adhesive backing and some you can screw to a wall. They come in various sizes and lengths and include various connectors. These are great for when you can’t hide cables behind or underneath something.

Cable Ties

Cable ties are great for holding multiple cables together. Usually, once you pull to tighten the cable tie, you can’t release it.

If you need to release a cable tie, you can buy the releasable type.

Cable Tie Base Mount

Cable ties will bundle cables together, but oftentimes you’ll need to attach them to a wall or something. You can buy cable ties with a screw hole.

However, you may have a hard time finding these with releasable cable ties. In that case, you can buy the base mounts themselves and insert releasable cable ties in them, or just use a twistie tie.

Cable box

Oftentimes, you’ll have an ugly power strip with a bunch of cables going to it. You can hide this ugliness in a cable box.

Cable Clips

If you need to clip some cables in a removable way, cable clips with adhesive backing can help with that.