('');
+ const convertMutation = useMutation(ApiGateway.convertToCurrency);
+
+ useEffect(() => {
+ setSelectedCurrency(currencyCode);
+ }, []);
+
+ const convert = useCallback(
+ (from: Money) => convertMutation.mutateAsync({ from, toCode: selectedCurrency }),
+ [convertMutation, selectedCurrency]
+ );
+
+ const onSelectCurrency = useCallback((currencyCode: string) => {
+ setSelectedCurrency(currencyCode);
+ SessionGateway.setSessionValue('currencyCode', currencyCode);
+ }, []);
+
+ const value = useMemo(
+ () => ({
+ convert,
+ currencyCodeList,
+ selectedCurrency,
+ setSelectedCurrency: onSelectCurrency,
+ }),
+ [convert, currencyCodeList, selectedCurrency, onSelectCurrency]
+ );
+
+ return {children};
+};
+
+export default CurrencyProvider;
diff --git a/src/frontend/static/favicon.ico b/src/frontend/public/favicon.ico
similarity index 100%
rename from src/frontend/static/favicon.ico
rename to src/frontend/public/favicon.ico
diff --git a/src/frontend/public/icons/Cart.svg b/src/frontend/public/icons/Cart.svg
new file mode 100644
index 0000000000..332575a3f8
--- /dev/null
+++ b/src/frontend/public/icons/Cart.svg
@@ -0,0 +1,12 @@
+
diff --git a/src/frontend/public/icons/Check.svg b/src/frontend/public/icons/Check.svg
new file mode 100644
index 0000000000..a6163b86b6
--- /dev/null
+++ b/src/frontend/public/icons/Check.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/frontend/public/icons/Chevron.svg b/src/frontend/public/icons/Chevron.svg
new file mode 100644
index 0000000000..ad264b85d3
--- /dev/null
+++ b/src/frontend/public/icons/Chevron.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/frontend/static/icons/Hipster_CartIcon.svg b/src/frontend/public/icons/Hipster_CartIcon.svg
similarity index 100%
rename from src/frontend/static/icons/Hipster_CartIcon.svg
rename to src/frontend/public/icons/Hipster_CartIcon.svg
diff --git a/src/frontend/public/images/Banner.png b/src/frontend/public/images/Banner.png
new file mode 100644
index 0000000000..0e6a57f368
Binary files /dev/null and b/src/frontend/public/images/Banner.png differ
diff --git a/src/frontend/static/img/products/bamboo-glass-jar.jpg b/src/frontend/public/static/img/products/bamboo-glass-jar.jpg
similarity index 100%
rename from src/frontend/static/img/products/bamboo-glass-jar.jpg
rename to src/frontend/public/static/img/products/bamboo-glass-jar.jpg
diff --git a/src/frontend/static/img/products/candle-holder.jpg b/src/frontend/public/static/img/products/candle-holder.jpg
similarity index 100%
rename from src/frontend/static/img/products/candle-holder.jpg
rename to src/frontend/public/static/img/products/candle-holder.jpg
diff --git a/src/frontend/static/img/products/hairdryer.jpg b/src/frontend/public/static/img/products/hairdryer.jpg
similarity index 100%
rename from src/frontend/static/img/products/hairdryer.jpg
rename to src/frontend/public/static/img/products/hairdryer.jpg
diff --git a/src/frontend/static/img/products/loafers.jpg b/src/frontend/public/static/img/products/loafers.jpg
similarity index 100%
rename from src/frontend/static/img/products/loafers.jpg
rename to src/frontend/public/static/img/products/loafers.jpg
diff --git a/src/frontend/static/img/products/mug.jpg b/src/frontend/public/static/img/products/mug.jpg
similarity index 100%
rename from src/frontend/static/img/products/mug.jpg
rename to src/frontend/public/static/img/products/mug.jpg
diff --git a/src/frontend/static/img/products/salt-and-pepper-shakers.jpg b/src/frontend/public/static/img/products/salt-and-pepper-shakers.jpg
similarity index 100%
rename from src/frontend/static/img/products/salt-and-pepper-shakers.jpg
rename to src/frontend/public/static/img/products/salt-and-pepper-shakers.jpg
diff --git a/src/frontend/static/img/products/sunglasses.jpg b/src/frontend/public/static/img/products/sunglasses.jpg
similarity index 100%
rename from src/frontend/static/img/products/sunglasses.jpg
rename to src/frontend/public/static/img/products/sunglasses.jpg
diff --git a/src/frontend/static/img/products/tank-top.jpg b/src/frontend/public/static/img/products/tank-top.jpg
similarity index 100%
rename from src/frontend/static/img/products/tank-top.jpg
rename to src/frontend/public/static/img/products/tank-top.jpg
diff --git a/src/frontend/static/img/products/watch.jpg b/src/frontend/public/static/img/products/watch.jpg
similarity index 100%
rename from src/frontend/static/img/products/watch.jpg
rename to src/frontend/public/static/img/products/watch.jpg
diff --git a/src/frontend/rpc.go b/src/frontend/rpc.go
deleted file mode 100644
index 67593facab..0000000000
--- a/src/frontend/rpc.go
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright 2018 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package main
-
-import (
- "context"
- "time"
-
- pb "github.com/opentelemetry/opentelemetry-demo/src/frontend/genproto/hipstershop"
-
- "github.com/pkg/errors"
-)
-
-const (
- avoidNoopCurrencyConversionRPC = false
-)
-
-func (fe *frontendServer) getCurrencies(ctx context.Context) ([]string, error) {
- currs, err := pb.NewCurrencyServiceClient(fe.currencySvcConn).
- GetSupportedCurrencies(ctx, &pb.Empty{})
- if err != nil {
- return nil, err
- }
- var out []string
- for _, c := range currs.CurrencyCodes {
- if _, ok := whitelistedCurrencies[c]; ok {
- out = append(out, c)
- }
- }
- return out, nil
-}
-
-func (fe *frontendServer) getProducts(ctx context.Context) ([]*pb.Product, error) {
- resp, err := pb.NewProductCatalogServiceClient(fe.productCatalogSvcConn).
- ListProducts(ctx, &pb.Empty{})
- return resp.GetProducts(), err
-}
-
-func (fe *frontendServer) getProduct(ctx context.Context, id string) (*pb.Product, error) {
- resp, err := pb.NewProductCatalogServiceClient(fe.productCatalogSvcConn).
- GetProduct(ctx, &pb.GetProductRequest{Id: id})
- return resp, err
-}
-
-func (fe *frontendServer) getCart(ctx context.Context, userID string) ([]*pb.CartItem, error) {
- resp, err := pb.NewCartServiceClient(fe.cartSvcConn).GetCart(ctx, &pb.GetCartRequest{UserId: userID})
- return resp.GetItems(), err
-}
-
-func (fe *frontendServer) emptyCart(ctx context.Context, userID string) error {
- _, err := pb.NewCartServiceClient(fe.cartSvcConn).EmptyCart(ctx, &pb.EmptyCartRequest{UserId: userID})
- return err
-}
-
-func (fe *frontendServer) insertCart(ctx context.Context, userID, productID string, quantity int32) error {
- _, err := pb.NewCartServiceClient(fe.cartSvcConn).AddItem(ctx, &pb.AddItemRequest{
- UserId: userID,
- Item: &pb.CartItem{
- ProductId: productID,
- Quantity: quantity},
- })
- return err
-}
-
-func (fe *frontendServer) convertCurrency(ctx context.Context, money *pb.Money, currency string) (*pb.Money, error) {
- if avoidNoopCurrencyConversionRPC && money.GetCurrencyCode() == currency {
- return money, nil
- }
- return pb.NewCurrencyServiceClient(fe.currencySvcConn).
- Convert(ctx, &pb.CurrencyConversionRequest{
- From: money,
- ToCode: currency})
-}
-
-func (fe *frontendServer) getShippingQuote(ctx context.Context, items []*pb.CartItem, currency string) (*pb.Money, error) {
- quote, err := pb.NewShippingServiceClient(fe.shippingSvcConn).GetQuote(ctx,
- &pb.GetQuoteRequest{
- Address: nil,
- Items: items})
- if err != nil {
- return nil, err
- }
- localized, err := fe.convertCurrency(ctx, quote.GetCostUsd(), currency)
- return localized, errors.Wrap(err, "failed to convert currency for shipping cost")
-}
-
-func (fe *frontendServer) getRecommendations(ctx context.Context, userID string, productIDs []string) ([]*pb.Product, error) {
- resp, err := pb.NewRecommendationServiceClient(fe.recommendationSvcConn).ListRecommendations(ctx,
- &pb.ListRecommendationsRequest{UserId: userID, ProductIds: productIDs})
- if err != nil {
- return nil, err
- }
- out := make([]*pb.Product, len(resp.GetProductIds()))
- for i, v := range resp.GetProductIds() {
- p, err := fe.getProduct(ctx, v)
- if err != nil {
- return nil, errors.Wrapf(err, "failed to get recommended product info (#%s)", v)
- }
- out[i] = p
- }
- if len(out) > 4 {
- out = out[:4] // take only first four to fit the UI
- }
- return out, err
-}
-
-func (fe *frontendServer) getAd(ctx context.Context, ctxKeys []string) ([]*pb.Ad, error) {
- ctx, cancel := context.WithTimeout(ctx, time.Millisecond*100)
- defer cancel()
-
- resp, err := pb.NewAdServiceClient(fe.adSvcConn).GetAds(ctx, &pb.AdRequest{
- ContextKeys: ctxKeys,
- })
- return resp.GetAds(), errors.Wrap(err, "failed to get ads")
-}
diff --git a/src/frontend/static/favicon-cymbal.ico b/src/frontend/static/favicon-cymbal.ico
deleted file mode 100644
index 6f8ea031ba..0000000000
Binary files a/src/frontend/static/favicon-cymbal.ico and /dev/null differ
diff --git a/src/frontend/static/icons/Cymbal_NavLogo.svg b/src/frontend/static/icons/Cymbal_NavLogo.svg
deleted file mode 100644
index 7edd507ccb..0000000000
--- a/src/frontend/static/icons/Cymbal_NavLogo.svg
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
diff --git a/src/frontend/static/icons/Hipster_Advert2.svg b/src/frontend/static/icons/Hipster_Advert2.svg
deleted file mode 100644
index 94f5663019..0000000000
--- a/src/frontend/static/icons/Hipster_Advert2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/frontend/static/icons/Hipster_CheckOutIcon.svg b/src/frontend/static/icons/Hipster_CheckOutIcon.svg
deleted file mode 100644
index cd0faa1dcc..0000000000
--- a/src/frontend/static/icons/Hipster_CheckOutIcon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/frontend/static/icons/Hipster_CurrencyIcon.svg b/src/frontend/static/icons/Hipster_CurrencyIcon.svg
deleted file mode 100644
index 0519717795..0000000000
--- a/src/frontend/static/icons/Hipster_CurrencyIcon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/frontend/static/icons/Hipster_DownArrow.svg b/src/frontend/static/icons/Hipster_DownArrow.svg
deleted file mode 100644
index 397300898a..0000000000
--- a/src/frontend/static/icons/Hipster_DownArrow.svg
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
diff --git a/src/frontend/static/icons/Hipster_FacebookIcon.svg b/src/frontend/static/icons/Hipster_FacebookIcon.svg
deleted file mode 100644
index 41093ad6fa..0000000000
--- a/src/frontend/static/icons/Hipster_FacebookIcon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/frontend/static/icons/Hipster_GooglePlayIcon.svg b/src/frontend/static/icons/Hipster_GooglePlayIcon.svg
deleted file mode 100644
index 128e761afa..0000000000
--- a/src/frontend/static/icons/Hipster_GooglePlayIcon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/frontend/static/icons/Hipster_HelpIcon.svg b/src/frontend/static/icons/Hipster_HelpIcon.svg
deleted file mode 100644
index 3d50868ce7..0000000000
--- a/src/frontend/static/icons/Hipster_HelpIcon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/frontend/static/icons/Hipster_HeroLogo.svg b/src/frontend/static/icons/Hipster_HeroLogo.svg
deleted file mode 100644
index 203d4c1dcd..0000000000
--- a/src/frontend/static/icons/Hipster_HeroLogo.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/frontend/static/icons/Hipster_HeroLogoCyan.svg b/src/frontend/static/icons/Hipster_HeroLogoCyan.svg
deleted file mode 100644
index 35d343b8bb..0000000000
--- a/src/frontend/static/icons/Hipster_HeroLogoCyan.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/frontend/static/icons/Hipster_InstagramIcon.svg b/src/frontend/static/icons/Hipster_InstagramIcon.svg
deleted file mode 100644
index 1927fb49ea..0000000000
--- a/src/frontend/static/icons/Hipster_InstagramIcon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/frontend/static/icons/Hipster_KitchenwareOffer.svg b/src/frontend/static/icons/Hipster_KitchenwareOffer.svg
deleted file mode 100644
index 4f5a3dba69..0000000000
--- a/src/frontend/static/icons/Hipster_KitchenwareOffer.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/frontend/static/icons/Hipster_NavLogo.svg b/src/frontend/static/icons/Hipster_NavLogo.svg
deleted file mode 100644
index bb6dafe070..0000000000
--- a/src/frontend/static/icons/Hipster_NavLogo.svg
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
diff --git a/src/frontend/static/icons/Hipster_PinterestIcon.svg b/src/frontend/static/icons/Hipster_PinterestIcon.svg
deleted file mode 100644
index e24bfd7f85..0000000000
--- a/src/frontend/static/icons/Hipster_PinterestIcon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/frontend/static/icons/Hipster_ProfileIcon.svg b/src/frontend/static/icons/Hipster_ProfileIcon.svg
deleted file mode 100644
index 7d043a7663..0000000000
--- a/src/frontend/static/icons/Hipster_ProfileIcon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/frontend/static/icons/Hipster_SearchIcon.svg b/src/frontend/static/icons/Hipster_SearchIcon.svg
deleted file mode 100644
index 36f894dda5..0000000000
--- a/src/frontend/static/icons/Hipster_SearchIcon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/frontend/static/icons/Hipster_TwitterIcon.svg b/src/frontend/static/icons/Hipster_TwitterIcon.svg
deleted file mode 100644
index 276b3c669d..0000000000
--- a/src/frontend/static/icons/Hipster_TwitterIcon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/frontend/static/icons/Hipster_UpDownControl.svg b/src/frontend/static/icons/Hipster_UpDownControl.svg
deleted file mode 100644
index be33647ef9..0000000000
--- a/src/frontend/static/icons/Hipster_UpDownControl.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
diff --git a/src/frontend/static/icons/Hipster_YoutubeIcon.svg b/src/frontend/static/icons/Hipster_YoutubeIcon.svg
deleted file mode 100644
index 3d018e3c5d..0000000000
--- a/src/frontend/static/icons/Hipster_YoutubeIcon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/frontend/static/images/Advert2BannerImage.png b/src/frontend/static/images/Advert2BannerImage.png
deleted file mode 100644
index ae012759d7..0000000000
Binary files a/src/frontend/static/images/Advert2BannerImage.png and /dev/null differ
diff --git a/src/frontend/static/images/AdvertBannerImage.png b/src/frontend/static/images/AdvertBannerImage.png
deleted file mode 100644
index c0b5b3ad6d..0000000000
Binary files a/src/frontend/static/images/AdvertBannerImage.png and /dev/null differ
diff --git a/src/frontend/static/images/HeroBannerImage.png b/src/frontend/static/images/HeroBannerImage.png
deleted file mode 100644
index 69e9a341ab..0000000000
Binary files a/src/frontend/static/images/HeroBannerImage.png and /dev/null differ
diff --git a/src/frontend/static/images/HeroBannerImage2.png b/src/frontend/static/images/HeroBannerImage2.png
deleted file mode 100644
index 26c4cef0ae..0000000000
Binary files a/src/frontend/static/images/HeroBannerImage2.png and /dev/null differ
diff --git a/src/frontend/static/images/VRHeadsets.png b/src/frontend/static/images/VRHeadsets.png
deleted file mode 100644
index dc9a9f3eb6..0000000000
Binary files a/src/frontend/static/images/VRHeadsets.png and /dev/null differ
diff --git a/src/frontend/static/images/credits.txt b/src/frontend/static/images/credits.txt
deleted file mode 100644
index 0ca9ceadc3..0000000000
--- a/src/frontend/static/images/credits.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-folded-clothes-on-white-chair.jpg,,https://unsplash.com/photos/fr0J5-GIVyg
-folded-clothes-on-white-chair-wide.jpg,,https://unsplash.com/photos/fr0J5-GIVyg
diff --git a/src/frontend/static/images/folded-clothes-on-white-chair-wide.jpg b/src/frontend/static/images/folded-clothes-on-white-chair-wide.jpg
deleted file mode 100644
index c675194e83..0000000000
Binary files a/src/frontend/static/images/folded-clothes-on-white-chair-wide.jpg and /dev/null differ
diff --git a/src/frontend/static/images/folded-clothes-on-white-chair.jpg b/src/frontend/static/images/folded-clothes-on-white-chair.jpg
deleted file mode 100644
index 23948b717a..0000000000
Binary files a/src/frontend/static/images/folded-clothes-on-white-chair.jpg and /dev/null differ
diff --git a/src/frontend/static/styles/cart.css b/src/frontend/static/styles/cart.css
deleted file mode 100644
index cb506cfd4c..0000000000
--- a/src/frontend/static/styles/cart.css
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright 2020 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-.cart-sections {
- padding-bottom: 120px;
- padding-top: 56px;
- background-color: #F9F9F9;
-}
-
-.cart-sections h3 {
- font-size: 36px;
- font-weight: normal;
-}
-
-.cart-sections a.cymbal-button-primary:hover {
- text-decoration: none;
- color: white;
-}
-
-/* Empty Cart Section */
-
-.empty-cart-section {
- max-width: 458px;
- margin: auto;
- text-align: center;
-}
-
-.empty-cart-section a {
- display: inline-block; /* So margin-top works. */
- margin-top: 32px;
-}
-
-.empty-cart-section a:hover {
- color: white;
- text-decoration: none;
-}
-
-/* Cart Summary Section */
-
-.cart-summary-empty-cart-button {
- margin-right: 10px;
-}
-
-.cart-summary-item-row,
-.cart-summary-shipping-row,
-.cart-summary-total-row {
- padding-bottom: 24px;
- padding-top: 24px;
- border-top: solid 1px rgba(154, 160, 166, 0.5);
-}
-
-.cart-summary-item-row img {
- border-radius: 20% 0 20% 20%;
-}
-
-.cart-summary-item-row-item-id-row {
- font-size: 12px;
- color: #5C6063;
-}
-
-.cart-summary-item-row h4 {
- font-size: 18px;
- font-weight: normal;
-}
-
-/* Stick item quantity and cost to the bottom (for wider screens). */
-@media (min-width: 768px) {
- .cart-summary-item-row .row:last-child {
- position: absolute;
- bottom: 0px;
- width: 100%;
- }
-}
-
-/* Item cost (price). */
-.cart-summary-item-row .row:last-child strong {
- font-weight: 500;
-}
-
-.cart-summary-total-row {
- font-size: 28px;
-}
-
-/* Cart Checkout Form */
-
-.cart-checkout-form h3 {
- margin-bottom: 0;
-}
-
-.payment-method-heading {
- margin-top: 36px;
-}
-
-/* "Place Order" button */
-.cart-checkout-form .cymbal-button-primary {
- margin-top: 36px;
-}
\ No newline at end of file
diff --git a/src/frontend/static/styles/order.css b/src/frontend/static/styles/order.css
deleted file mode 100644
index 5b1d3e9dee..0000000000
--- a/src/frontend/static/styles/order.css
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Copyright 2020 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-.order {
- background: #F9F9F9;
-}
-
-.order-complete-section {
- max-width: 487px;
- padding-top: 56px;
- padding-bottom: 120px;
-}
-
-.order-complete-section h3 {
- margin: 0;
- font-size: 36px;
- font-weight: normal;
-}
-
-.order-complete-section p {
- margin-top: 8px;
-}
-
-.order-complete-section .padding-y-24 {
- padding-bottom: 24px;
- padding-top: 24px;
-}
-
-.order-complete-section .border-bottom-solid {
- border-bottom: 1px solid rgba(154, 160, 166, 0.5);
-}
-
-.order-complete-section .cymbal-button-primary {
- margin-top: 24px;
-}
-
-.order-complete-section a.cymbal-button-primary:hover {
- text-decoration: none;
- color: white;
-}
diff --git a/src/frontend/static/styles/styles.css b/src/frontend/static/styles/styles.css
deleted file mode 100644
index c8dc8eb61a..0000000000
--- a/src/frontend/static/styles/styles.css
+++ /dev/null
@@ -1,634 +0,0 @@
-/**
- * Copyright 2020 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* General */
-
-html, body {
- height: 100%;
-}
-
-body {
- color: #111111;
- font-family: 'DM Sans', sans-serif;
- display: flex;
- flex-direction: column;
-}
-
-/* Header */
-
-header {
- background-color: #853B5C;
- color: white;
-}
-
-/*
-This allows the sub-navbar (white strip containing logo)
-to be as wide as the browser window.
-*/
-header > div:nth-child(2).navbar.sub-navbar {
- padding-left: 0;
- padding-right: 0;
-}
-header > div:nth-child(2) > .container {
- max-width: none;
-}
-
-header .cart-link {
- position: relative;
- display: block;
- margin-left: 25px;
- display: flex;
- flex-flow: column;
- align-items: center;
- justify-content: center;
-}
-
-header .cart-size-circle {
- display: flex;
- align-items: center;
- justify-content: center;
- position: absolute;
- top: 24px;
- left: 11px;
- width: 16px;
- height: 16px;
- font-size: 11px;
- border-radius: 4px 4px 0 4px;
- color: white;
- background-color: #853B5C;
-}
-
-header .navbar {
- padding-top: 5px;
- padding-bottom: 5px;
-}
-
-header .h-free-shipping {
- font-size: 14px;
-}
-
-header .h-controls {
- display: flex;
- justify-content: flex-end;
-}
-
-header .h-control {
- display: flex;
- align-items: center;
- font-size: 12px;
- position: relative;
- margin-left: 40px;
- color: #605f64;
-}
-
-header .h-control:first-child {
- margin-left: 0;
-}
-
-header .h-control input {
- border: none;
- padding: 0 31px 0 31px;
- width: 250px;
- height: 24px;
- flex-shrink: 0;
- background-color: #f2f2f2;
- display: flex;
- align-items: center;
-}
-
-header .h-control input:focus {
- outline: 0;
- border: 0;
- box-shadow: 0;
-}
-
-header .icon {
- width: 20px;
- height: 20px;
-}
-
-header .icon.search-icon {
- width: 12px;
- height: 13px;
- position: absolute;
- left: 10px;
-}
-
-/* The currency drop-down. */
-
-header img.currency-icon, header span.currency-icon {
- position: relative;
- left: 35px;
- top: -1px;
- width: 20px;
- display: inline-block;
- height: 20px;
-}
-
-header span.currency-icon {
- font-size: 16px;
- text-align: center;
-}
-
-header .h-control select {
- display: flex;
- align-items: center;
- background: transparent;
- border-radius: 0;
- border: 1px solid #acacac;
- width: 130px;
- height: 40px;
- flex-shrink: 0;
- padding: 1px 0 0 45px;
- font-size: 16px;
- border-radius: 8px;
-}
-
-header .icon.arrow {
- position: absolute;
- right: 25px;
- width: 10px;
- height: 5px;
-}
-
-header .h-control::-webkit-input-placeholder {
- /* Chrome/Opera/Safari */
- font-size: 12px;
- color: #605f64;
-}
-
-header .h-control::-moz-placeholder {
- /* Firefox 19+ */
- font-size: 12px;
- color: #605f64;
-}
-
-header .h-control :-ms-input-placeholder {
- /* IE 10+ */
- font-size: 12px;
- color: #605f64;
-}
-
-header .h-control :-moz-placeholder {
- /* Firefox 18- */
- font-size: 12px;
- color: #605f64;
-}
-
-header .navbar.sub-navbar {
- height: 60px;
- background-color: white;
- font-size: 15px;
- color: #b4b2bb;
- padding-top: 0;
- padding-bottom: 0;
- box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.25);
- z-index: 1; /* Need this to see the box-shadow on the home page. */
-}
-
-header .navbar.sub-navbar > .container {
- padding-left: 26px;
- padding-right: 26px;
-}
-
-header .top-left-logo {
- height: 40px;
-}
-
-header .top-left-logo-cymbal {
- height: 30px;
-}
-
-header .navbar.sub-navbar .navbar-brand {
- padding: 0;
-}
-
-header .navbar.sub-navbar a {
- color: #b4b2bb;
-}
-
-header .navbar.sub-navbar nav a {
- margin: 0 10px;
-}
-
-header .navbar.sub-navbar .controls {
- display: flex;
- height: 60px;
-}
-
-header .navbar.sub-navbar .controls a img {
- width: 20px;
- height: 20px;
- margin-bottom: 3px;
-}
-
-/* Footer */
-
-footer.py-5 {
- flex-shrink: 0;
- padding: 0 !important;
-}
-
-footer .footer-top {
- padding: 60px 0px;
- background-color: #570D2E;
- color: white;
-}
-
-footer .footer-top a {
- color: white;
- text-decoration: underline;
-}
-
-/* The containing the session-id. */
-footer .footer-top p:nth-child(3) {
- margin-top: 56px;
-}
-
-footer .footer-top .footer-social,
-footer .footer-top .footer-app,
-footer .footer-links,
-footer .footer-top .social,
-footer .footer-top .app {
- display: block;
- align-items: center;
-}
-
-footer .footer-top .footer-social {
- padding: 31px;
-}
-
-footer .footer-top .footer-social h4 {
- margin-bottom: 0;
-}
-
-footer .footer-top .footer-social div {
- width: 50%;
-}
-
-/* Home */
-
-main {
- flex: 1 0 auto;
- background-color: #F9F9F9;
-}
-
-@media (min-width: 992px) {
- .home .container-fluid {
- height: calc(100vh - 91px); /* 91px is the height of the top/header bars. */
- }
- .home .container-fluid > .row > .col-4 {
- height: calc(100vh - 91px);
- }
- .home .container-fluid > .row > .col-lg-8 {
- height: calc(100vh - 91px);
- overflow-y: scroll;
- }
-}
-
-.home-mobile-hero-banner {
- height: 200px;
- background: url(/static/images/folded-clothes-on-white-chair-wide.jpg) no-repeat top center;
- background-size: cover;
-}
-
-.home-desktop-left-image {
- background: url(/static/images/folded-clothes-on-white-chair.jpg) no-repeat center;
- background-size: cover;
-}
-
-.hot-products-row h3 {
- margin-bottom: 32px;
- margin-top: 56px;
- font-size: 36px;
- font-weight: normal;
-}
-
-.hot-products-row {
- padding-bottom: 70px;
- padding-left: 10%;
- padding-right: 10%;
-}
-
-.hot-product-card {
- margin-bottom: 52px;
- padding-left: 16px;
- padding-right: 16px;
-}
-
-.hot-product-card img {
- width: 100%;
- height: auto;
- border-radius: 20% 0 20% 20%;
-}
-
-.hot-product-card-name {
- margin-top: 8px;
- font-size: 18px;
-}
-
-.hot-product-card-price {
- font-size: 14px;
-}
-
-.hot-product-card > a:first-child {
- position: relative;
- display: block;
-}
-
-.hot-product-card-img-overlay {
- position: absolute;
- height: 100%;
- width: 100%;
- top: 0;
- left: 0;
- border-radius: 20% 0 20% 20%;
- background-color: transparent;
-}
-
-.hot-product-card:hover .hot-product-card-img-overlay {
- background-color: rgba(71, 0, 29, 0.2);
-}
-
-/*
-This chunk ensures the left/right padding of the footer is
-similar to that of the hot-products-row.
-*/
-.home-desktop-footer-row {
- padding-left: 9%;
- padding-right: 9%;
- background-color: #570D2E;
-}
-
-/* Ad */
-
-.ad {
- position: relative;
- background-color: #FF9A9B;
- font-size: 24px;
- text-align: center;
-}
-
-/* "Ad" text. */
-.ad strong {
- position: absolute;
- top: 6px;
- left: 12px;
- font-size: 14px;
- font-weight: normal;
-}
-
-.ad a {
- color: black;
-}
-
-/* Product */
-
-.h-product {
- margin-top: 56px;
- margin-bottom: 112px;
- max-width: 1200px;
- background-color: #F9F9F9;
-}
-
-.h-product > .row {
- align-items: flex-end;
-}
-
-.h-product .product-image {
- width: 100%;
- border-radius: 20% 20% 0 20%;
-}
-
-.h-product .product-price {
- font-size: 28px;
-}
-
-.h-product .product-info .product-wrapper {
- margin-left: 15px;
-}
-
-.h-product .product-info h2 {
- margin-bottom: 16px;
- margin-top: 16px;
- font-size: 56px;
- line-height: 1.14;
- font-weight: normal;
- color: #111111;
-}
-
-.h-product .input-group-text,
-.h-product .btn.btn-info {
- font-size: 18px;
- line-height: 1.89;
- letter-spacing: 3.6px;
- text-align: center;
- color: #111111;
- border-radius: 0;
-}
-
-.product-quantity-dropdown {
- position: relative;
- width: 100px;
-}
-
-.product-quantity-dropdown select {
- width: 100%;
- height: 45px;
- border: 1px solid #acacac;
- padding: 10px 16px;
- border-radius: 8px;
-}
-
-.product-quantity-dropdown img {
- position: absolute;
- right: 25px;
- top: 20px;
- width: 10px;
- height: 5px;
-}
-
-.h-product .cymbal-button-primary {
- margin-top: 16px;
-}
-
-/* Platform Banner */
-
-.local,
-.aws-platform,
-.onprem-platform,
-.azure-platform,
-.alibaba-platform,
-.gcp-platform {
- position: fixed;
- top: 0;
- left: 0;
- width: 10px;
- height: 100vh;
- color: white;
- font-size: 24px;
- z-index: 999;
-}
-
-.aws-platform,
-.aws-platform .platform-flag {
- background-color: #ff9900;
-}
-
-.onprem-platform,
-.onprem-platform .platform-flag {
- background-color: #34A853;
-}
-
-.gcp-platform,
-.gcp-platform .platform-flag {
- background-color: #4285f4;
-}
-
-
-.azure-platform,
-.azure-platform .platform-flag {
- background-color: #f35426;
-}
-
-.alibaba-platform,
-.alibaba-platform .platform-flag {
- background-color: #ffC300;
-}
-
-.local,
-.local .platform-flag {
- background-color: #2c0678;
-}
-
-.platform-flag {
- position: absolute;
- top: 98px;
- left: 0;
- width: 190px;
- height: 50px;
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-/* Recommendation */
-
-.recommendations {
- background: #F9F9F9;
- padding-bottom: 55px;
-}
-
-.recommendations .container {
- max-width: 1174px;
-}
-
-@media (max-width: 992px) {
- .recommendations .container {
- max-width: none;
- }
-}
-
-.recommendations h2 {
- border-top: solid 1px;
- padding: 40px 0;
- font-weight: normal;
- text-align: center;
-}
-
-.recommendations h5 {
- margin-top: 8px;
- font-weight: normal;
- font-size: 18px;
-}
-
-.recommendations img {
- height: 100%;
- width: 100%;
- border-radius: 20% 0 20% 20%;
-}
-
-select {
- -webkit-appearance: none;
- -webkit-border-radius: 0px;
-}
-
-/* Cymbal */
-
-/*
-If we ever decide to create a separate Cymbal CSS library for Cymbal components,
-the rules below could be extracted.
-*/
-
-.cymbal-button-primary, .cymbal-button-secondary {
- display: inline-block;
- border: solid 1px #CE0631;
- padding: 8px 16px;
- outline: none;
- font-size: 14px;
- border-radius: 22px;
- cursor: pointer;
-}
-
-.cymbal-button-primary:focus, .cymbal-button-secondary:focus {
- outline: none; /* To override browser (Chrome) default blue outline. */
-}
-
-.cymbal-button-primary {
- background-color: #CE0631;
- color: white;
-}
-
-.cymbal-button-secondary {
- background: none;
- color: #CE0631;
-}
-
-.cymbal-form-field {
- position: relative;
- margin-top: 24px;
-}
-
-.cymbal-form-field label {
- width: 100%;
- margin: 0;
- padding: 8px 16px 0 16px;
- font-size: 12px;
- line-height: 1.8em; /* Without this, there might be a 1px gap underneath. */
- font-weight: normal;
- border-radius: 4px 4px 0px 0px;
- color: #5C6063;
- background-color: white;
-}
-
-.cymbal-form-field input[type='email'],
-.cymbal-form-field input[type='password'],
-.cymbal-form-field select,
-.cymbal-form-field input[type='text'] {
- width: 100%;
- border: none;
- border-bottom: 1px solid #9AA0A6;
- padding: 0 16px 8px 16px;
- outline: none;
- color: #1E2021;
-}
-
-.cymbal-form-field .cymbal-dropdown-chevron {
- position: absolute;
- right: 25px;
- width: 10px;
- height: 5px;
-}
diff --git a/src/frontend/styles/Cart.styled.ts b/src/frontend/styles/Cart.styled.ts
new file mode 100644
index 0000000000..4751533418
--- /dev/null
+++ b/src/frontend/styles/Cart.styled.ts
@@ -0,0 +1,86 @@
+import styled from 'styled-components';
+import Button from '../components/Button';
+
+export const Cart = styled.div`
+ margin: 24px;
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ margin: 100px;
+ }
+`;
+
+export const Container = styled.div`
+ display: flex;
+ flex-direction: column;
+ gap: 24px;
+`;
+
+export const CarTitle = styled.h1`
+ margin: 0;
+`;
+
+export const Header = styled.div`
+ margin-bottom: 50px;
+ display: flex;
+ flex-direction: column;
+ gap: 5px;
+ align-items: start;
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ }
+`;
+
+export const Title = styled.h1`
+ text-align: center;
+ margin: 0;
+ font-size: ${({ theme }) => theme.sizes.mLarge};
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ font-size: ${({ theme }) => theme.sizes.dLarge};
+ }
+`;
+
+export const Subtitle = styled.h3`
+ text-align: center;
+ margin: 0;
+ font-size: ${({ theme }) => theme.sizes.mMedium};
+ color: ${({ theme }) => theme.colors.textLightGray};
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ font-size: ${({ theme }) => theme.sizes.dMedium};
+ }
+`;
+
+export const ButtonContainer = styled.div`
+ display: flex;
+ justify-content: center;
+ align-items: center;
+`;
+
+export const EmptyCartContainer = styled.div`
+ display: flex;
+ flex-direction: column;
+ gap: 28px;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 120px;
+ margin-top: 24px;
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ display: grid;
+ grid-template-columns: auto;
+ }
+`;
+
+export const EmptyCartButton = styled(Button)`
+ font-weight: ${({ theme }) => theme.fonts.regular};
+ color: ${({ theme }) => theme.colors.otelRed};
+ padding: 0;
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ width: inherit;
+ }
+`;
diff --git a/src/frontend/styles/Checkout.styled.ts b/src/frontend/styles/Checkout.styled.ts
new file mode 100644
index 0000000000..5a1234fdf9
--- /dev/null
+++ b/src/frontend/styles/Checkout.styled.ts
@@ -0,0 +1,76 @@
+import styled from 'styled-components';
+
+export const Checkout = styled.div`
+ margin: 20px;
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ margin: 100px;
+ }
+`;
+
+export const Container = styled.div`
+ display: flex;
+ flex-direction: column;
+ gap: 28px;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 120px;
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ display: grid;
+ grid-template-columns: auto;
+ }
+`;
+
+export const DataRow = styled.div`
+ display: grid;
+ width: 100%;
+ justify-content: space-between;
+ grid-template-columns: 1fr 1fr;
+ padding: 24px 0;
+ border-top: solid 1px rgba(154, 160, 166, 0.5);
+
+ span:last-of-type {
+ text-align: right;
+ }
+`;
+
+export const ItemList = styled.div`
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ gap: 24px;
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ margin: 72px 0;
+ }
+`;
+
+export const Title = styled.h1`
+ text-align: center;
+ margin: 0;
+
+ font-size: ${({ theme }) => theme.sizes.mLarge};
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ font-size: ${({ theme }) => theme.sizes.dLarge};
+ }
+`;
+
+export const Subtitle = styled.h3`
+ text-align: center;
+ margin: 0;
+
+ font-size: ${({ theme }) => theme.sizes.mMedium};
+ color: ${({ theme }) => theme.colors.textLightGray};
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ font-size: ${({ theme }) => theme.sizes.dMedium};
+ }
+`;
+
+export const ButtonContainer = styled.div`
+ display: flex;
+ justify-content: center;
+ align-items: center;
+`;
diff --git a/src/frontend/styles/Home.styled.ts b/src/frontend/styles/Home.styled.ts
new file mode 100644
index 0000000000..c529951623
--- /dev/null
+++ b/src/frontend/styles/Home.styled.ts
@@ -0,0 +1,48 @@
+import styled from 'styled-components';
+
+export const Container = styled.div`
+ width: 100%;
+ padding: 0 20px;
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ padding: 0 100px;
+ }
+`;
+
+export const Row = styled.div`
+ display: flex;
+ flex-wrap: wrap;
+ width: 100%;
+`;
+
+export const Content = styled.div`
+ width: 100%;
+ ${({ theme }) => theme.breakpoints.desktop} {
+ margin-top: 100px;
+ }
+`;
+
+export const HotProducts = styled.div`
+ margin-bottom: 20px;
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ margin-bottom: 100px;
+ }
+`;
+
+export const HotProductsTitle = styled.h1`
+ font-size: ${({ theme }) => theme.sizes.mLarge};
+ font-weight: ${({ theme }) => theme.fonts.bold};
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ font-size: ${({ theme }) => theme.sizes.dxLarge};
+ }
+`;
+
+export const Home = styled.div`
+ @media (max-width: 992px) {
+ ${Content} {
+ width: 100%;
+ }
+ }
+`;
diff --git a/src/frontend/styles/ProductDetail.styled.ts b/src/frontend/styles/ProductDetail.styled.ts
new file mode 100644
index 0000000000..afb8a2f1c2
--- /dev/null
+++ b/src/frontend/styles/ProductDetail.styled.ts
@@ -0,0 +1,84 @@
+import styled from 'styled-components';
+import Button from '../components/Button';
+
+export const ProductDetail = styled.div`
+ ${({ theme }) => theme.breakpoints.desktop} {
+ padding: 100px;
+ }
+`;
+
+export const Container = styled.div`
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: 28px;
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ grid-template-columns: 40% 60%;
+ }
+`;
+
+export const Image = styled.div<{ $src: string }>`
+ width: 100%;
+ height: 150px;
+
+ background: url(${({ $src }) => $src}) no-repeat center;
+ background-size: 100% auto;
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ height: 500px;
+ background-position: top;
+ }
+`;
+
+export const Details = styled.div`
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ padding: 0 20px;
+`;
+
+export const AddToCart = styled(Button)`
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ justify-content: center;
+ width: 100%;
+ font-size: ${({ theme }) => theme.sizes.dSmall};
+ font-weight: ${({ theme }) => theme.fonts.regular};
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ font-size: ${({ theme }) => theme.sizes.dMedium};
+ width: 220px;
+ }
+`;
+
+export const Name = styled.h5`
+ font-size: ${({ theme }) => theme.sizes.dMedium};
+ margin: 0;
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ font-size: ${({ theme }) => theme.sizes.dLarge};
+ }
+`;
+
+export const Text = styled.p`
+ margin: 0;
+`;
+
+export const Description = styled(Text)`
+ margin: 0;
+ color: ${({ theme }) => theme.colors.textLightGray};
+ font-weight: ${({ theme }) => theme.fonts.regular};
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ font-size: ${({ theme }) => theme.sizes.dMedium};
+ }
+`;
+
+export const ProductPrice = styled(Text)`
+ font-weight: ${({ theme }) => theme.fonts.bold};
+
+ ${({ theme }) => theme.breakpoints.desktop} {
+ font-size: ${({ theme }) => theme.sizes.dLarge};
+ }
+`;
diff --git a/src/frontend/styles/Theme.ts b/src/frontend/styles/Theme.ts
new file mode 100644
index 0000000000..a4be4e9c1b
--- /dev/null
+++ b/src/frontend/styles/Theme.ts
@@ -0,0 +1,38 @@
+import { DefaultTheme } from 'styled-components';
+
+const Theme: DefaultTheme = {
+ colors: {
+ otelBlue: '#5262A8',
+ otelYellow: '#EAAA3B',
+ otelGray: '#403F4B',
+ otelRed: '#FB7181',
+ backgroundGray: 'rgba(64, 63, 75, 0.1)',
+ lightBorderGray: 'rgba(82, 98, 168, 0.3)',
+ borderGray: '#2E2437',
+ textGray: '#29293E',
+ textLightGray: '#78788C',
+ white: '#FFFFFF',
+ },
+ breakpoints: {
+ desktop: '@media (min-width: 768px)',
+ },
+ sizes: {
+ mxLarge: '22px',
+ mLarge: '20px',
+ mMedium: '14px',
+ mSmall: '12px',
+ dxLarge: '58px',
+ dLarge: '40px',
+ dMedium: '18px',
+ dSmall: '16px',
+ nano: '8px',
+ },
+ fonts: {
+ bold: '800',
+ regular: '500',
+ semiBold: '700',
+ light: '400',
+ },
+};
+
+export default Theme;
diff --git a/src/frontend/styles/globals.css b/src/frontend/styles/globals.css
new file mode 100755
index 0000000000..3f721358d4
--- /dev/null
+++ b/src/frontend/styles/globals.css
@@ -0,0 +1,16 @@
+body {
+ background: white;
+ margin: 0px;
+ font-family: 'Open Sans', sans-serif;
+}
+
+body * {
+ box-sizing: border-box;
+ color: #29293E;
+ font-weight: 600;
+}
+
+select {
+ -webkit-appearance: none;
+ -webkit-border-radius: 0px;
+}
diff --git a/src/frontend/styles/style.d.ts b/src/frontend/styles/style.d.ts
new file mode 100644
index 0000000000..6b02f32629
--- /dev/null
+++ b/src/frontend/styles/style.d.ts
@@ -0,0 +1,38 @@
+import 'styled-components';
+
+declare module 'styled-components' {
+ export interface DefaultTheme {
+ colors: {
+ otelBlue: string;
+ otelYellow: string;
+ otelGray: string;
+ otelRed: string;
+ backgroundGray: string;
+ lightBorderGray: string;
+ borderGray: string;
+ textGray: string;
+ textLightGray: string;
+ white: string;
+ };
+ sizes: {
+ mLarge: string;
+ mxLarge: string;
+ mMedium: string;
+ mSmall: string;
+ dLarge: string;
+ dxLarge: string;
+ dMedium: string;
+ dSmall: string;
+ nano: string;
+ };
+ breakpoints: {
+ desktop: string;
+ };
+ fonts: {
+ bold: string;
+ regular: string;
+ semiBold: string;
+ light: string;
+ };
+ }
+}
diff --git a/src/frontend/templates/ad.html b/src/frontend/templates/ad.html
deleted file mode 100644
index 3fbed23cae..0000000000
--- a/src/frontend/templates/ad.html
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-{{ define "text_ad" }}
-
-{{ end }}
diff --git a/src/frontend/templates/cart.html b/src/frontend/templates/cart.html
deleted file mode 100644
index 8d613e4dcd..0000000000
--- a/src/frontend/templates/cart.html
+++ /dev/null
@@ -1,233 +0,0 @@
-
-
-{{ define "cart" }}
- {{ template "header" . }}
-
-
-
- {{$.platform_name}}
-
-
-
-
-
- {{ if eq (len $.items) 0 }}
-
- Your shopping cart is empty!
- Items you add to your shopping cart will appear here.
- Continue Shopping
-
- {{ else }}
-
-
-
-
-
-
-
-
Cart ({{ $.cart_size }})
-
-
-
-
- {{ range $.items }}
-
-
-
-
-
-
- SKU #{{ .Item.Id }}
-
-
-
-
- Quantity: {{ .Quantity }}
-
-
-
- {{ renderMoney .Price }}
-
-
-
-
-
- {{ end }}
-
-
-
Shipping
-
{{ renderMoney .shipping_cost }}
-
-
-
-
Total
-
{{ renderMoney .total_cost }}
-
-
-
-
-
-
-
-
- {{ end }}
-
-
-
- {{ if $.recommendations}}
- {{ template "recommendations" $.recommendations }}
- {{ end }}
-
- {{ template "footer" . }}
- {{ end }}
diff --git a/src/frontend/templates/error.html b/src/frontend/templates/error.html
deleted file mode 100644
index e312d42e4f..0000000000
--- a/src/frontend/templates/error.html
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-{{ define "error" }}
- {{ template "header" . }}
-
-
- {{$.platform_name}}
-
-
-
-
-
-
Uh, oh!
-
Something has failed. Below are some details for debugging.
-
-
HTTP Status: {{.status_code}} {{.status}}
-
- {{- .error -}}
-
-
-
-
-
- {{ template "footer" . }}
- {{ end }}
diff --git a/src/frontend/templates/footer.html b/src/frontend/templates/footer.html
deleted file mode 100644
index 6fbfd371ac..0000000000
--- a/src/frontend/templates/footer.html
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-{{ define "footer" }}
-
-
-
-