# Building the Pocket Rice marketing website

> A rundown on some of the designs and working behind the Pocket Rice marketing website

- Canonical: https://dennisokeeffe.com/blog/2026-06-08-building-the-pocket-rice-marketing-website
- Published: 2026-06-08
- Updated: 2026-06-08
- Tags: marketing, architecture

On weekends, I pitch in my time to help my partner run her Onigiri business "Pocket Rice" here in Byron Bay.

As part of her recent push for the business, we set up [the Pocket Rice marketing website](https://pocketrice.com.au) as means of generating reach within the local region and having a more professional presence.

This blog post gives an overview of the marketing site build and the backend with a core pillar of the build being to keep build costs low.

## Website at a high-level

I added the marketing website and backend to a monorepo that I have already been maintaining for other apps that manage our ordering system.

The website itself actually started as a Next.js website that my partner "vibe coded" which I had to take over and optimise for certain desired outcomes (asset optimisation etc.) as well as figure out the infrastructure for.

Initially, the website handed over used the Next.js app router for the backend which I migrated over to a Go HTTP backend with their standard library router. After the migration, I converted the Next.js website to be a static website only.

For hosting, the code is (currently) hosted on GitHub and using GitHub Actions to deploy to AWS via the AWS CDK infrastructure. The repo already had this configured from the order management system application I had already configured, so all I needed to do was add a new stack.

This stack itself hosts everything behind [AWS CloudFront](https://aws.amazon.com/cloudfront/) which has a number of benefits, but one of those was the ability to alter behaviour based on the route.

All key Next.js static pages are redirected to a private S3 origin to serve static assets and pages, while anything under the `/api/*` path will be directed to an [AWS API Gateway](https://aws.amazon.com/api-gateway/) which has a [proxy integration](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html) to an [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) running the Golang server.

The following is a simplified look at the architecture:

```mermaid
architecture-beta
    group aws(cloud)[AWS]

    service visitor(internet)[Visitor]
    service cloudfront(cloud)[CloudFront] in aws
    service s3(disk)[Private S3 bucket] in aws
    service gateway(server)[API Gateway] in aws
    service lambda(server)[Go Lambda] in aws
    service github(server)[GitHub Actions]
    service stripe(cloud)[Stripe]

    visitor:R --> L:cloudfront
    cloudfront:R --> L:s3
    cloudfront:B --> T:gateway
    gateway:R --> L:lambda
    lambda:B --> T:stripe
    github:L --> R:s3
    github:B --> R:lambda
```

There are a number of benefits to this:

1. The lambda at the expected volume will remain in free tier.
2. There are no cross-origin resource sharing setups that I need to configure.
3. We get the benefit of all the security rules and DDOS protections that can be applied directly with a CloudFront origin.

These benefits alone have me incredibly bullish. Because we are using the Golang standard library HTTP router, if we ever outgrow lambda or costs become non-insignificant, it is easy enough to migrate over to an alternative like [Elastic Container Service](https://aws.amazon.com/ecs/) (or anywhere I decide to change hosting to, but ECS can also be an API Gateway target and is easy to migrate to).

Once deployed via CI/CD on a merge to `main`, our [marketing website becomes reachable](https://pocketrice.com.au).

![Home page view](https://cdn.dennisokeeffe.com/assets/2026-06-08-building-the-pocket-rice-marketing-website/home-page-1.webp)


  There is also a staging workflow. On branches there is a preview deployment
  made but I have left that out-of-scope for this blog post.


## Blog pages

We host a [blog](https://pocketrice.com.au/blog) on the marketing website as a means for helping to generate organic traffic.

![Our blog landing page](https://cdn.dennisokeeffe.com/assets/2026-06-08-building-the-pocket-rice-marketing-website/blogs-page-1.webp)

Our goal is to have a funnel that can be used to drive awareness of our brand within Byron Bay.

Each blog post itself has a simple `MDX` configuration that allows us to reuse defined React.js components through the posts themselves.

![An example blog post](https://cdn.dennisokeeffe.com/assets/2026-06-08-building-the-pocket-rice-marketing-website/blogs-page-2.webp)

Our goal here will be to identify some key blog posts and drive content around them. Some of our current "anchor" blog posts include:

- [Education on the difference between onigiri and sushi](https://pocketrice.com.au/blog/onigiri-vs-sushi), a question we get all the time at markets.
- [Market guides such as the Byron Bay Community Market guide](https://pocketrice.com.au/blog/byron-community-market-sunday-guide) in an attempt to win a share of market traffic.
- [Guides to Japanese good around Byron Bay](https://pocketrice.com.au/blog/best-japanese-food-byron-bay) which we hope to begin improving our ranking for.

It is still early days here, so we will be looking to drive traffic and partnerships going forward for this.

## Online store

As part of our expansion online, my partner also wanted to introduce a store to sell Japanese home goods.

Australia is currently going through it's "Japan phase" where everyone is holidaying in Japan and being introduced to Japanese culture. The hope is that this can be a way to connect those positive feelings that Australians have towards Japan and to bring them into homes here.

The website itself has a landing page for the shop.

![Online store](https://cdn.dennisokeeffe.com/assets/2026-06-08-building-the-pocket-rice-marketing-website/shop-page-1.webp)

As you would expect, each item and variant has its own page for adding to a cart.

![Item detail page](https://cdn.dennisokeeffe.com/assets/2026-06-08-building-the-pocket-rice-marketing-website/shop-page-2.webp)

We are using [Stripe checkout](https://stripe.com/au/payments/checkout) to manage our payments and manually doing shipments ourselves.

## Other key pages

In addition to this, we also have a few other key pages to help with organic traffic or things that we wanted to highlight.

Our [markets](https://pocketrice.com.au/markets) page highlights where people can find us.

![We list all the markets we participate or have participated in](https://cdn.dennisokeeffe.com/assets/2026-06-08-building-the-pocket-rice-marketing-website/markets-page.webp)

We list our [suppliers](https://pocketrice.com.au/suppliers) that we use for our onigiri as well to also highlight our local community members and importers.

![Our suppliers page](https://cdn.dennisokeeffe.com/assets/2026-06-08-building-the-pocket-rice-marketing-website/suppliers-page.webp)

Finally we have a [contact page](https://pocketrice.com.au/contact) to have a way for others to contact us.

![Contact form from the contact page](https://cdn.dennisokeeffe.com/assets/2026-06-08-building-the-pocket-rice-marketing-website/contact-page.webp)

## SEO and indexing

At the moment, there is a very annoying bug where [you cannot add newer Google Service accounts for the indexing API](https://support.google.com/webmasters/thread/429020059/unable-to-add-service-account-email-to-google-search-console?hl=en), meaning that right now I am stuck doing a manual process with the [Google Seach console](https://search.google.com/search-console/about) in order to update sitemaps and request page indexing.

Things that I am also doing at the moment include indexing for other search engines as well as working through some SEO books. I've given myself 12 weeks from the first release of the website in order to see if I can start ranking highly across the web for our Pocket Rice brand in key categories such as markets to see and food you must eat. I may even write a follow-up post on how success is going in that area.

## Links and further reading

- [Pocket Rice homepage](https://pocketrice.com.au)
- [Pocket Rice blog](https://pocketrice.com.au/blog)
- [Onigiri vs sushi](https://pocketrice.com.au/blog/onigiri-vs-sushi)
- [Byron Bay Community Market guide](https://pocketrice.com.au/blog/byron-community-market-sunday-guide)
- [Japanese food around Byron Bay](https://pocketrice.com.au/blog/best-japanese-food-byron-bay)
- [Pocket Rice markets](https://pocketrice.com.au/markets)
- [Pocket Rice suppliers](https://pocketrice.com.au/suppliers)
- [Pocket Rice contact page](https://pocketrice.com.au/contact)
- [AWS CloudFront](https://aws.amazon.com/cloudfront/)
- [AWS API Gateway](https://aws.amazon.com/api-gateway/)
- [API Gateway proxy integration](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html)
- [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
- [Amazon Elastic Container Service](https://aws.amazon.com/ecs/)
- [Stripe Checkout](https://stripe.com/au/payments/checkout)
- [Google Search Console service account issue](https://support.google.com/webmasters/thread/429020059/unable-to-add-service-account-email-to-google-search-console?hl=en)
- [Google Search Console](https://search.google.com/search-console/about)
