<!doctype html><html lang=en-GB><head><meta charset=utf-8><link crossorigin href=https://cloudcdn.pro rel=preconnect><title>Kaishi, a Static Site Generator Starter Template</title><meta content="jane.doe@kaishi.one (Jane Doe)" name=author><meta content="Make beautiful websites with Kaishi, a Static Site Generator starter template." name=description><meta content="kaishi, static site generator, static site generator, minimalist website template, modern website template, responsive website template, website starter template, freelance creative, startup founder, small business owner, online presence" name=keywords><meta content="width=device-width,initial-scale=1,shrink-to-fit=no" name=viewport><meta content=ARIA name=accessibility><meta content=fullKeyboardControl name=accessibility><meta content=noFlashingHazard name=accessibility><meta content=yes name=apple-mobile-web-app-capable><meta content=black-translucent name=apple-mobile-web-app-status-bar-style><meta content=Kaishi name=apple-mobile-web-app-title><meta content=yes name=mobile-web-app-capable><meta content="default-src 'self'; script-src 'self' 'unsafe-inline'; connect-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'; font-src 'self'; media-src 'self';" http-equiv=Content-Security-Policy><link href=https://kaishi.one hreflang=en rel=alternate><link href=https://kaishi.one rel=canonical><link href=https://cloudcdn.pro/kaishi/images/favicon.ico rel=icon type=image/x-icon><link href=https://cloudcdn.pro/kaishi/images/icons/192x192.png rel=apple-touch-icon sizes=192x192><link href=https://cloudcdn.pro/kaishi/images/icons/16x16.png rel=icon sizes=16x16 type=image/png><link href=https://cloudcdn.pro/kaishi/images/icons/32x32.png rel=icon sizes=32x32 type=image/png><meta content="rgb(143, 250, 113)" name=theme-color><link href=/en/manifest.json rel=manifest><link href=/en/rss.xml rel=alternate type=application/rss+xml><style>:root{--vp-bg:#fff;--vp-bs:#f6f6f7;--vp-ba:#f6f6f7;--vp-t1:#3c3c43;--vp-t2:#4a4a52;--vp-t3:#595960;--vp-br:#166534;--vp-bl:#14532d;--vp-bd:#3c3c433d;--vp-nh:64px}[data-theme=dark]{--vp-bg:#1b1b1f;--vp-bs:#202127;--vp-ba:#161618;--vp-t1:#f5f5f7;--vp-t2:#cccccf;--vp-t3:#a1a1a8;--vp-br:#86efac;--vp-bl:#bbf7d0;--vp-bd:#b4b4be52}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--vp-bg:#1b1b1f;--vp-bs:#202127;--vp-ba:#161618;--vp-t1:#f5f5f7;--vp-t2:#cccccf;--vp-t3:#a1a1a8;--vp-br:#86efac;--vp-bl:#bbf7d0;--vp-bd:#b4b4be52}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}body{color:var(--vp-t1);background:var(--vp-bg);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:16px;line-height:1.7}a{color:var(--vp-br);text-decoration:none}a:hover{color:var(--vp-bl)}img{max-width:100%;height:auto;display:block}h1,h2,h3,h4,h5,h6{color:var(--vp-t1);font-weight:600}h1{margin:1.5rem 0 1rem;font-size:clamp(1.75rem,4vw,2.5rem)}h2{border-bottom:1px solid var(--vp-bd);margin:2rem 0 .75rem;padding-bottom:.75rem;font-size:clamp(1.35rem,3vw,1.75rem)}h3{margin:1.5rem 0 .5rem;font-size:1.25rem}p{margin:.75rem 0}strong{font-weight:600}code,pre{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.875em}pre{background:var(--vp-bs);border:1px solid var(--vp-bd);color:var(--vp-t1);border-radius:8px;padding:1rem 1.25rem;overflow-x:auto}code{background:var(--vp-bs);border-radius:4px;padding:.15em .35em}pre code{background:0 0;padding:0}.skip-link{background:var(--vp-br);color:#fff;z-index:1000;border-radius:8px;padding:.5rem 1rem;font-weight:600;position:absolute;top:-100%;left:1rem}.skip-link:focus{outline:none;top:1rem}.nav{z-index:100;height:var(--vp-nh);background:var(--vp-bg);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--vp-bd);position:fixed;top:0;left:0;right:0}.nav-inner{height:var(--vp-nh);align-items:center;max-width:1376px;margin:0 auto;padding:0 24px;display:flex}.nav-brand{color:var(--vp-t1);flex-shrink:0;align-items:center;gap:8px;font-weight:600;text-decoration:none;display:flex}.nav-brand img{width:28px;height:28px}.nav-search{border:1px solid var(--vp-bd);cursor:pointer;color:var(--vp-t3);background:0 0;border-radius:8px;align-items:center;gap:8px;margin-left:auto;margin-right:16px;padding:6px 14px;font-size:14px;display:flex}.nav-search:hover{border-color:var(--vp-br)}.nav-search svg{stroke:currentColor;stroke-width:2px;fill:none;width:16px;height:16px}.nav-search kbd{border:1px solid var(--vp-bd);background:var(--vp-bs);color:var(--vp-t3);border-radius:4px;margin-left:8px;padding:1px 5px;font-size:11px}.nav-links{align-items:center;gap:4px;display:flex}.nav-links a{color:var(--vp-t1);padding:4px 12px;font-size:14px;font-weight:500}.nav-links a:hover{color:var(--vp-br)}.nav-controls{flex-shrink:0;align-items:center;gap:8px;margin-left:16px;display:flex}.lang-btn{cursor:pointer;color:var(--vp-t2);background:0 0;border:none;align-items:center;padding:4px;display:flex;position:relative}.lang-btn svg{stroke:currentColor;stroke-width:1.5px;fill:none;width:20px;height:20px}.lang-dropdown{top:calc(100% + 8px);background:var(--vp-bg);border:1px solid var(--vp-bd);z-index:200;border-radius:8px;min-width:480px;max-height:70vh;padding:8px;display:none;position:absolute;inset-inline-end:0;overflow-y:auto;box-shadow:0 8px 24px #00000026}.lang-menu-grid{grid-template-columns:repeat(4,1fr);gap:2px;display:grid}.lang-menu-grid a{color:var(--vp-t1);white-space:nowrap;text-overflow:ellipsis;border-radius:4px;align-items:center;gap:6px;padding:6px 10px;font-size:12px;display:flex;overflow:hidden}.lang-menu-grid a:hover{background:var(--vp-bs)}.lang-menu-grid .flag{flex-shrink:0;font-size:14px}.lang-btn{gap:4px;font-size:13px;font-weight:500}.lang-btn .lang-code{font-variant:all-small-caps;letter-spacing:.5px}.mobile-menu{display:none}.mobile-lang{border-top:1px solid var(--vp-bd);grid-template-columns:repeat(2,1fr);gap:4px;margin-top:12px;padding-top:12px;display:grid}.mobile-lang a{color:var(--vp-t1);border-bottom:none;align-items:center;gap:6px;padding:8px;font-size:13px;display:flex}@media (width<=768px){.lang-dropdown{min-width:280px;inset-inline-end:8px}.lang-menu-grid{grid-template-columns:repeat(2,1fr)}}.lang-dropdown.open{display:block}.lang-dropdown a{color:var(--vp-t1);border-radius:4px;padding:6px 12px;font-size:13px;display:block}.lang-dropdown a:hover{background:var(--vp-bs)}.theme-switch{background:var(--vp-bs);border:1px solid var(--vp-bd);cursor:pointer;border-radius:11px;flex-shrink:0;width:40px;height:22px;padding:0;position:relative}.theme-switch:before{content:"";background:var(--vp-t2);border-radius:50%;width:16px;height:16px;transition:transform .25s;position:absolute;top:2px;left:2px}[data-theme=dark] .theme-switch:before,.theme-switch.dark:before{transform:translate(18px)}.theme-switch .sun-svg,.theme-switch .moon-svg{width:14px;height:14px;stroke:var(--vp-t3);stroke-width:2px;fill:none;position:absolute;top:3px}.theme-switch .sun-svg{left:3px}.theme-switch .moon-svg{right:3px}.menu-toggle{border:1px solid var(--vp-bd);cursor:pointer;color:var(--vp-t1);background:0 0;border-radius:6px;padding:4px 6px;display:none}.lang-btn,.menu-toggle{min-width:44px;min-height:44px}.theme-switch{position:relative}.theme-switch:after{content:"";position:absolute;inset:-11px}.menu-toggle svg{stroke:currentColor;stroke-width:2px;fill:none;width:20px;height:20px}.hero{padding:calc(var(--vp-nh) + 60px) 24px 80px;text-align:center;max-width:960px;margin:0 auto}.hero-name{background:linear-gradient(120deg,var(--vp-br) 30%,#4ade80);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;margin-bottom:1rem;font-size:clamp(2rem,5vw,3.5rem);font-weight:700;line-height:1.1}.hero-tagline{color:var(--vp-t2);max-width:560px;margin:0 auto 2rem;font-size:clamp(1rem,2vw,1.25rem);line-height:1.6}.hero-actions{flex-wrap:wrap;justify-content:center;gap:12px;display:flex}.btn-brand,.btn-alt,.btn-submit{cursor:pointer;border:none;border-radius:20px;align-items:center;padding:10px 24px;font-size:15px;display:inline-flex}.btn-brand,.btn-submit{background:var(--vp-br);color:#fff;font-weight:600}.btn-brand:hover,.btn-submit:hover{background:var(--vp-bl)}.btn-alt{color:var(--vp-t1);border:1px solid var(--vp-bd);background:0 0;font-weight:500}.btn-alt:hover{border-color:var(--vp-br)}.hero-banner{border-radius:12px;max-width:720px;margin:2rem auto 0;overflow:hidden;box-shadow:0 8px 28px #0000001f}.hero-banner img{width:100%;display:block}.content-wrap{max-width:740px;margin:0 auto;margin-top:var(--vp-nh);padding:48px 24px}.content{color:var(--vp-t1);font-size:16px;line-height:1.7}.content ul,.content ol{margin:.75rem 0;padding-left:1.25rem}.content li{margin:.25rem 0}.breadcrumb{color:var(--vp-t3);margin-bottom:24px;font-size:14px}.breadcrumb a{color:var(--vp-br)}.breadcrumb span{margin:0 6px}.article-meta{color:var(--vp-t2);align-items:center;gap:12px;margin-bottom:2rem;font-size:14px;display:flex}.footer{background:var(--vp-ba);padding:48px 24px 24px}.footer-inner{max-width:1152px;margin:0 auto}.footer-cols{grid-template-columns:repeat(3,1fr);gap:32px;margin-bottom:32px;display:grid}.footer-heading{color:var(--vp-t1);text-transform:uppercase;letter-spacing:.5px;margin-bottom:12px;font-size:14px;font-weight:700}.footer-col a{color:var(--vp-t2);padding:3px 0;font-size:14px;display:block}.footer-col a:hover{color:var(--vp-br)}.footer-bottom{border-top:1px solid var(--vp-bd);text-align:center;color:var(--vp-t3);padding-top:20px;font-size:13px}.form-card{background:var(--vp-bs);border:1px solid var(--vp-bd);border-radius:12px;max-width:520px;margin:2rem auto 0;padding:2rem}.form-group{flex-direction:column;gap:6px;margin-bottom:1.25rem;display:flex}.form-group label{color:var(--vp-t1);font-size:14px;font-weight:600}.form-group input,.form-group select,.form-group textarea{background:var(--vp-bg);color:var(--vp-t1);border:1px solid var(--vp-bd);border-radius:8px;padding:8px 12px;font-family:inherit;font-size:15px}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{border-color:var(--vp-br);outline:2px solid var(--vp-br);outline-offset:1px}.form-group textarea{resize:vertical;min-height:120px}:focus-visible{outline:2px solid var(--vp-br);outline-offset:2px}.navbar-nav{align-items:center;gap:0;margin:0;padding:0;list-style:none;display:flex}.nav-item{display:inline-flex}.nav-item a{color:var(--vp-t1);text-transform:none;padding:4px 12px;font-size:14px;font-weight:500;text-decoration:none;display:block}.nav-item a:hover{color:var(--vp-br)}.nav-item a.text-uppercase{text-transform:none}.nav-item a.p-2{padding:4px 12px}.ms-auto{margin-left:auto}.mb-2,.mb-lg-0{margin-bottom:0}#ssg-search-btn{display:none!important}.content{overflow:hidden}.content img{border-radius:8px;max-width:100%;height:auto;margin:1.5rem 0;display:block}.content .img-fluid{border-radius:8px;max-width:100%;height:auto}.content .w-50{max-width:50%}.content .float-start{float:left;margin:0 1.5rem 1rem 0}.content .float-end{float:right;margin:0 0 1rem 1.5rem}.content .p-5{padding:0}.content .mb-3{margin-bottom:1rem}.content .fw-bold{font-weight:600}.content .text-danger{color:var(--vp-br)}.content .display-1{font-size:2rem;font-weight:600}.content:after{content:"";clear:both;display:table}@media (width<=768px){.content .w-50{max-width:100%}.content .float-start,.content .float-end{float:none;margin:1rem 0}.nav-links,.nav-search,.navbar-nav{display:none}.menu-toggle{display:flex}.nav-controls{margin-left:auto}.nav-controls .lang-btn{display:none}.mobile-menu{top:var(--vp-nh);background:var(--vp-bg);z-index:99;padding:24px;display:none;position:fixed;bottom:0;left:0;right:0;overflow-y:auto}.mobile-menu.open{display:block}.mobile-menu a,.mobile-menu .nav-item a{color:var(--vp-t1);border-bottom:1px solid var(--vp-bd);padding:10px 0;font-size:15px;display:block}.mobile-menu .navbar-nav,.mobile-menu .nav-item{display:block}.hero{padding:calc(var(--vp-nh) + 32px) 16px 48px}.hero-name{font-size:clamp(1.75rem,6vw,2.5rem)}.content-wrap{padding:32px 16px}.footer-cols{grid-template-columns:1fr;gap:24px}}</style><meta name="description" content="Write once, ship in 28 languages Kaishi is a starter template for product sites. It works in English, Japanese, Arabic, Mandarin, and 24 more languages. There">
<meta property="og:title" content="Kaishi, a Static Site Generator Starter Template">
<meta property="og:description" content="Write once, ship in 28 languages Kaishi is a starter template for product sites. It works in English, Japanese, Arabic, Mandarin, and 24 more languages. There">
<meta property="og:type" content="website">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Kaishi, a Static Site Generator Starter Template">
<meta name="twitter:description" content="Write once, ship in 28 languages Kaishi is a starter template for product sites. It works in English, Japanese, Arabic, Mandarin, and 24 more languages. There">
<link rel="alternate" hreflang="ar" href="https://example.com/ar/index.html" />
<link rel="alternate" hreflang="bn" href="https://example.com/bn/index.html" />
<link rel="alternate" hreflang="cs" href="https://example.com/cs/index.html" />
<link rel="alternate" hreflang="de" href="https://example.com/de/index.html" />
<link rel="alternate" hreflang="en" href="https://example.com/en/index.html" />
<link rel="alternate" hreflang="es" href="https://example.com/es/index.html" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/index.html" />
<link rel="alternate" hreflang="ha" href="https://example.com/ha/index.html" />
<link rel="alternate" hreflang="he" href="https://example.com/he/index.html" />
<link rel="alternate" hreflang="hi" href="https://example.com/hi/index.html" />
<link rel="alternate" hreflang="id" href="https://example.com/id/index.html" />
<link rel="alternate" hreflang="it" href="https://example.com/it/index.html" />
<link rel="alternate" hreflang="ja" href="https://example.com/ja/index.html" />
<link rel="alternate" hreflang="ko" href="https://example.com/ko/index.html" />
<link rel="alternate" hreflang="nl" href="https://example.com/nl/index.html" />
<link rel="alternate" hreflang="pl" href="https://example.com/pl/index.html" />
<link rel="alternate" hreflang="pt" href="https://example.com/pt/index.html" />
<link rel="alternate" hreflang="ro" href="https://example.com/ro/index.html" />
<link rel="alternate" hreflang="ru" href="https://example.com/ru/index.html" />
<link rel="alternate" hreflang="sv" href="https://example.com/sv/index.html" />
<link rel="alternate" hreflang="th" href="https://example.com/th/index.html" />
<link rel="alternate" hreflang="tl" href="https://example.com/tl/index.html" />
<link rel="alternate" hreflang="tr" href="https://example.com/tr/index.html" />
<link rel="alternate" hreflang="uk" href="https://example.com/uk/index.html" />
<link rel="alternate" hreflang="vi" href="https://example.com/vi/index.html" />
<link rel="alternate" hreflang="yo" href="https://example.com/yo/index.html" />
<link rel="alternate" hreflang="zh" href="https://example.com/zh/index.html" />
<link rel="alternate" hreflang="zh-tw" href="https://example.com/zh-tw/index.html" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/index.html" />
</head><body id=page-top itemscope itemtype=http://schema.org/WebPage><a class=skip-link href=#main>Skip to content</a><nav aria-label="Main navigation" class=nav id=mainNav itemscope itemtype=http://schema.org/SiteNavigationElement><div class=nav-inner><a aria-label="Logo of Kaishi, a starter template for static sites - Home" class=nav-brand href=/en/> <img alt="Logo of Kaishi, a starter template for static sites" decoding=async height=33 loading=lazy src=https://cloudcdn.pro/kaishi/v1/logos/kaishi.svg width=100> <span itemprop=name>Kaishi</span> </a><button aria-label=Search class=nav-search type=button><svg viewbox="0 0 24 24" aria-hidden=true><circle cx=11 cy=11 r=8 /><line x1=21 x2=16.65 y1=21 y2=16.65 /></svg> <span>Search</span> <kbd>⌘K</kbd></button><div class=nav-links id=navLinks><ul class="navbar-nav ms-auto mb-2 mb-lg-0"><li class=nav-item><a class="text-uppercase p-2" aria-label=Features href=/features/index.html title=Features>Features</a></li><li class=nav-item><a class="text-uppercase p-2" aria-label=Posts href=/posts/index.html title=Posts>Posts</a></li><li class=nav-item><a aria-label="Explore by tag" class="text-uppercase p-2" title="Explore by tag" href=/tags/index.html>Explore by tag</a></li><li class=nav-item><a aria-label="Contact Us" class="text-uppercase p-2" title="Contact Us" href=/contact/index.html>Contact Us</a></li></ul></div><div class=nav-controls><div style=position:relative><button aria-label="Select language" class=lang-btn id=langToggle type=button><span aria-hidden=true>🌐</span> <span class=lang-code>EN</span></button><div class=lang-dropdown id=langDropdown><div class=lang-menu-grid><a href=/ hreflang=en lang=en><span class=flag>🇬🇧</span> English</a><a href=/fr/ hreflang=fr lang=fr><span class=flag>🇫🇷</span> Français</a><a href=/ar/ hreflang=ar lang=ar><span class=flag>🇸🇦</span> العربية</a><a href=/bn/ hreflang=bn lang=bn><span class=flag>🇧🇩</span> বাংলা</a><a href=/cs/ hreflang=cs lang=cs><span class=flag>🇨🇿</span> Čeština</a><a href=/de/ hreflang=de lang=de><span class=flag>🇩🇪</span> Deutsch</a><a href=/es/ hreflang=es lang=es><span class=flag>🇪🇸</span> Español</a><a href=/ha/ hreflang=ha lang=ha><span class=flag>🇳🇬</span> Hausa</a><a href=/he/ hreflang=he lang=he><span class=flag>🇮🇱</span> עברית</a><a href=/hi/ hreflang=hi lang=hi><span class=flag>🇮🇳</span> हिन्दी</a><a href=/id/ hreflang=id lang=id><span class=flag>🇮🇩</span> Indonesia</a><a href=/it/ hreflang=it lang=it><span class=flag>🇮🇹</span> Italiano</a><a href=/ja/ hreflang=ja lang=ja><span class=flag>🇯🇵</span> 日本語</a><a href=/ko/ hreflang=ko lang=ko><span class=flag>🇰🇷</span> 한국어</a><a href=/nl/ hreflang=nl lang=nl><span class=flag>🇳🇱</span> Nederlands</a><a href=/pl/ hreflang=pl lang=pl><span class=flag>🇵🇱</span> Polski</a><a href=/pt/ hreflang=pt lang=pt><span class=flag>🇵🇹</span> Português</a><a href=/ro/ hreflang=ro lang=ro><span class=flag>🇷🇴</span> Română</a><a href=/ru/ hreflang=ru lang=ru><span class=flag>🇷🇺</span> Русский</a><a href=/sv/ hreflang=sv lang=sv><span class=flag>🇸🇪</span> Svenska</a><a href=/th/ hreflang=th lang=th><span class=flag>🇹🇭</span> ไทย</a><a href=/tl/ hreflang=tl lang=tl><span class=flag>🇵🇭</span> Filipino</a><a href=/tr/ hreflang=tr lang=tr><span class=flag>🇹🇷</span> Türkçe</a><a href=/uk/ hreflang=uk lang=uk><span class=flag>🇺🇦</span> Українська</a><a href=/vi/ hreflang=vi lang=vi><span class=flag>🇻🇳</span> Tiếng Việt</a><a href=/yo/ hreflang=yo lang=yo><span class=flag>🇳🇬</span> Yorùbá</a><a href=/zh/ hreflang=zh lang=zh><span class=flag>🇨🇳</span> 简体中文</a><a href=/zh-tw/ hreflang=zh-tw lang=zh-tw><span class=flag>🇹🇼</span> 繁體中文</a></div></div></div><button aria-label="Toggle dark mode" class=theme-switch id=themeToggle type=button><svg viewbox="0 0 24 24" aria-hidden=true class=sun-svg><circle cx=12 cy=12 r=4 /><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"/></svg> <svg viewbox="0 0 24 24" aria-hidden=true class=moon-svg><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg></button></div><button aria-label="Toggle navigation" aria-controls=mobileMenu aria-expanded=false class=menu-toggle type=button><svg viewbox="0 0 24 24" aria-hidden=true><line x1=3 x2=21 y1=6 y2=6 /><line x1=3 x2=21 y1=12 y2=12 /><line x1=3 x2=21 y1=18 y2=18 /></svg></button></div></nav><div aria-label="Mobile navigation" class=mobile-menu id=mobileMenu role=navigation><ul class="navbar-nav ms-auto mb-2 mb-lg-0"><li class=nav-item><a class="text-uppercase p-2" aria-label=Features href=/features/index.html title=Features>Features</a></li><li class=nav-item><a class="text-uppercase p-2" aria-label=Posts href=/posts/index.html title=Posts>Posts</a></li><li class=nav-item><a aria-label="Explore by tag" class="text-uppercase p-2" title="Explore by tag" href=/tags/index.html>Explore by tag</a></li><li class=nav-item><a aria-label="Contact Us" class="text-uppercase p-2" title="Contact Us" href=/contact/index.html>Contact Us</a></li></ul><div class=mobile-lang><a href=/ hreflang=en lang=en><span class=flag>🇬🇧</span> English</a><a href=/fr/ hreflang=fr lang=fr><span class=flag>🇫🇷</span> Français</a><a href=/ar/ hreflang=ar lang=ar><span class=flag>🇸🇦</span> العربية</a><a href=/bn/ hreflang=bn lang=bn><span class=flag>🇧🇩</span> বাংলা</a><a href=/cs/ hreflang=cs lang=cs><span class=flag>🇨🇿</span> Čeština</a><a href=/de/ hreflang=de lang=de><span class=flag>🇩🇪</span> Deutsch</a><a href=/es/ hreflang=es lang=es><span class=flag>🇪🇸</span> Español</a><a href=/ha/ hreflang=ha lang=ha><span class=flag>🇳🇬</span> Hausa</a><a href=/he/ hreflang=he lang=he><span class=flag>🇮🇱</span> עברית</a><a href=/hi/ hreflang=hi lang=hi><span class=flag>🇮🇳</span> हिन्दी</a><a href=/id/ hreflang=id lang=id><span class=flag>🇮🇩</span> Indonesia</a><a href=/it/ hreflang=it lang=it><span class=flag>🇮🇹</span> Italiano</a><a href=/ja/ hreflang=ja lang=ja><span class=flag>🇯🇵</span> 日本語</a><a href=/ko/ hreflang=ko lang=ko><span class=flag>🇰🇷</span> 한국어</a><a href=/nl/ hreflang=nl lang=nl><span class=flag>🇳🇱</span> Nederlands</a><a href=/pl/ hreflang=pl lang=pl><span class=flag>🇵🇱</span> Polski</a><a href=/pt/ hreflang=pt lang=pt><span class=flag>🇵🇹</span> Português</a><a href=/ro/ hreflang=ro lang=ro><span class=flag>🇷🇴</span> Română</a><a href=/ru/ hreflang=ru lang=ru><span class=flag>🇷🇺</span> Русский</a><a href=/sv/ hreflang=sv lang=sv><span class=flag>🇸🇪</span> Svenska</a><a href=/th/ hreflang=th lang=th><span class=flag>🇹🇭</span> ไทย</a><a href=/tl/ hreflang=tl lang=tl><span class=flag>🇵🇭</span> Filipino</a><a href=/tr/ hreflang=tr lang=tr><span class=flag>🇹🇷</span> Türkçe</a><a href=/uk/ hreflang=uk lang=uk><span class=flag>🇺🇦</span> Українська</a><a href=/vi/ hreflang=vi lang=vi><span class=flag>🇻🇳</span> Tiếng Việt</a><a href=/yo/ hreflang=yo lang=yo><span class=flag>🇳🇬</span> Yorùbá</a><a href=/zh/ hreflang=zh lang=zh><span class=flag>🇨🇳</span> 简体中文</a><a href=/zh-tw/ hreflang=zh-tw lang=zh-tw><span class=flag>🇹🇼</span> 繁體中文</a></div></div><header class=hero><h1 class=hero-name>Kaishi</h1><p class=hero-tagline>Build Amazing Websites with Minimal Effort using Kaishi Starter Templates</p><div class=hero-actions><a class=btn-brand href=#main>Get Started</a><a class=btn-alt href=/en/features/index.html>Learn More</a></div><div class=hero-banner><img alt="MacBook Pro on white surface" src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 398' preserveAspectRatio='xMidYMid slice'><defs><linearGradient id='g' x1='0' y1='0' x2='1' y2='1'><stop offset='0' stop-color='%23166534'/><stop offset='1' stop-color='%2386efac'/></linearGradient></defs><rect width='1440' height='398' fill='url(%23g)'/></svg>" decoding=async fetchpriority=high height=398 width=1440></div></header><main aria-label="Main content" class=content-wrap id=main><div class=content><h2>Write once, ship in 28 languages</h2><p><strong>Kaishi</strong> is a starter template for product sites. It works in English, Japanese, Arabic, Mandarin, and 24 more languages. There is no JavaScript runtime needed. It uses Markdown, needs no framework, and renders on the server. Any browser can read the HTML on any device.</p><h2>Built for global products</h2><ul><li><strong>28 locales out of the box</strong> — includes 4 right-to-left languages, 7 CJK scripts, and 17 Latin-script variants</li><li><strong>hreflang + x-default wired in</strong> — search engines see every locale and page</li><li><strong>Per-locale search, sitemap, and feed</strong> — <code>/fr/search-index.json</code>, <code>/de/sitemap.xml</code>, etc.</li><li><strong>Accept-Language negotiation</strong> — <code>/</code> sends visitors to their preferred locale with a graceful fallback</li></ul><h2>Try the language switcher</h2><p>Use the language switcher in the top right. You can also use the list at the bottom of any page. It shows this content in any of the 28 supported languages. The URL changes but the content stays in sync.</p></div></main><footer aria-label=Footer class=footer id=footer><div class=footer-inner><div class=footer-cols><div class=footer-col><p class=footer-heading>About</p><a href=/en/>Home</a><a href=/en/contact/index.html>Contact</a></div><div class=footer-col><p class=footer-heading>Resources</p><a href=/en/posts/index.html>Blog</a><a href=/en/rss.xml>RSS Feed</a></div><div class=footer-col><p class=footer-heading>Legal</p><a href=/en/privacy/index.html>Privacy</a></div></div><div class=footer-bottom>Copyright © 2023-2026 Kaishi. All rights reserved.</div></div></footer><script type=application/ld+json>
{"@context":"http://schema.org/","@type":"BlogPosting","headline":"Kaishi, a Static Site Generator Starter Template","datePublished":"Wed, 01 Jan 2025 01:01:01 GMT","dateModified":"Wed, 01 Jan 2025 01:01:01 GMT","description":"Make beautiful websites with Kaishi, a Static Site Generator starter template.","image":{"@type":"ImageObject","height":"2048","width":"2048","url":"https://cloudcdn.pro/kaishi/v1/logos/kaishi.svg"},"mainEntityOfPage":{"@type":"WebPage","@id":"https://kaishi.one","name":"Build Amazing Websites with Minimal Effort using Kaishi Starter Templates"},"author":"jane.doe@kaishi.one (Jane Doe)","copyrightHolder":{"@type":"Person","@id":"jane.doe@kaishi.one (Jane Doe)"},"copyrightYear":"Copyright © 2023-2026 Kaishi. All rights reserved.","creator":{"@type":"Person","@id":"jane.doe@kaishi.one (Jane Doe)"},"inLanguage":"en-GB","name":"Kaishi","publisher":{"@type":"Person","@id":"jane.doe@kaishi.one (Jane Doe)"}}
</script><script>(function(){var r=document.documentElement,sw=document.getElementById(`themeToggle`),lt=document.getElementById(`langToggle`),ld=document.getElementById(`langDropdown`),mt=document.querySelector(`.menu-toggle`),mm=document.getElementById(`mobileMenu`);function setTheme(v){r.setAttribute(`data-theme`,v),localStorage.setItem(`vitepress-theme-appearance`,v),v===`dark`?sw.classList.add(`dark`):sw.classList.remove(`dark`)}var saved=localStorage.getItem(`vitepress-theme-appearance`);saved?setTheme(saved):matchMedia(`(prefers-color-scheme:dark)`).matches&&setTheme(`dark`);var ns=document.querySelector(`.nav-search`);ns&&ns.addEventListener(`click`,function(){var b=document.getElementById(`ssg-search-btn`);if(b)b.click();else{var o=document.getElementById(`ssg-search-overlay`);if(o){o.classList.add(`active`);var inp=document.getElementById(`ssg-search-input`);inp&&(inp.value=``,inp.focus())}}}),sw.addEventListener(`click`,function(){setTheme(r.getAttribute(`data-theme`)===`dark`?`light`:`dark`)}),lt&<.addEventListener(`click`,function(e){e.stopPropagation(),ld.classList.toggle(`open`)}),document.addEventListener(`click`,function(){ld&&ld.classList.remove(`open`)}),mt&&mt.addEventListener(`click`,function(){var ex=this.getAttribute(`aria-expanded`)===`true`;this.setAttribute(`aria-expanded`,!ex),mm.classList.toggle(`open`)});var lp=location.pathname.match(/^\/(en|fr|ar|bn|cs|de|es|ha|he|hi|id|it|ja|ko|nl|pl|pt|ro|ru|sv|th|tl|tr|uk|vi|yo|zh-tw|zh)\//);if(lp){var pfx=`/`+lp[1];document.querySelectorAll(`a[href^="/"]`).forEach(function(a){var h=a.getAttribute(`href`);h&&h.charAt(0)===`/`&&h!==`/`&&!/^\/(en|fr|ar|bn|cs|de|es|ha|he|hi|id|it|ja|ko|nl|pl|pt|ro|ru|sv|th|tl|tr|uk|vi|yo|zh-tw|zh)\//.test(h)&&a.setAttribute(`href`,pfx+h)})}var _p=location.pathname,_m=_p.match(/^\/(en|fr|ar|bn|cs|de|es|ha|he|hi|id|it|ja|ko|nl|pl|pt|ro|ru|sv|th|tl|tr|uk|vi|yo|zh-tw|zh)\//),_src=_m?_m[1]:`en`,_rest=_m?_p.slice(_m[0].length):_p.replace(/^\//,``);_src===`fr`&&(_rest=_rest.replace(/^articles\//,`posts/`).replace(/^fonctionnalites\//,`features/`)),document.querySelectorAll(`a[hreflang]`).forEach(function(a){var _t=a.getAttribute(`hreflang`),_r=_rest;_t===`fr`&&(_r=_r.replace(/^posts\//,`articles/`).replace(/^features\//,`fonctionnalites/`)),a.setAttribute(`href`,_t===`en`?`/`+_r:`/`+_t+`/`+_r)})})();</script>
<!-- SSG Search Widget -->
<div id="ssg-search-widget">
<style>
/* ── Trigger button (always visible) ── */
#ssg-search-btn{position:fixed;top:16px;right:16px;z-index:9998;display:flex;align-items:center;gap:8px;padding:8px 16px;background:#fff;border:1px solid #d1d5db;border-radius:8px;cursor:pointer;font-family:-apple-system,system-ui,sans-serif;font-size:14px;color:#595960;box-shadow:0 1px 3px rgba(0,0,0,.08);transition:border-color .15s,box-shadow .15s}
#ssg-search-btn:hover{border-color:#595960;box-shadow:0 2px 6px rgba(0,0,0,.12)}
#ssg-search-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
#ssg-search-btn kbd{font-family:inherit;font-size:11px;padding:2px 6px;background:#f3f4f6;border:1px solid #e5e7eb;border-radius:4px;color:#595960;margin-left:4px}
/* ── Modal overlay ── */
#ssg-search-overlay{display:none;position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,.5);align-items:flex-start;justify-content:center;padding-top:12vh}
#ssg-search-overlay.active{display:flex}
#ssg-search-box{background:#fff;border-radius:12px;width:92%;max-width:640px;box-shadow:0 25px 60px rgba(0,0,0,.3);overflow:hidden;font-family:-apple-system,system-ui,sans-serif}
#ssg-search-header{display:flex;align-items:center;padding:0 16px;border-bottom:1px solid #e5e7eb}
#ssg-search-header svg{width:20px;height:20px;stroke:#9ca3af;fill:none;stroke-width:2;flex-shrink:0}
#ssg-search-input{flex:1;padding:16px 12px;font-size:16px;border:none;outline:none;background:transparent}
#ssg-search-results{max-height:50vh;overflow-y:auto}
#ssg-sr-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}
.ssg-result{display:block;padding:12px 20px;text-decoration:none;color:#111;border-bottom:1px solid #f3f4f6;transition:background .1s}
.ssg-result:hover,.ssg-result.active{background:#ecfdf5}
.ssg-result-title{font-weight:600;font-size:15px;margin-bottom:3px}
.ssg-result-snippet{font-size:13px;color:#595960;line-height:1.5}
.ssg-result-snippet mark{background:#fef08a;color:inherit;border-radius:2px;padding:0 2px}
.ssg-no-results{padding:32px 20px;text-align:center;color:#595960;font-size:14px}
.ssg-no-results[role="status"]{}
/* Forced-colours / Windows High Contrast Mode */
@media(forced-colors:active){
#ssg-search-btn{border:1px solid ButtonText}
#ssg-search-btn:focus{outline:2px solid Highlight}
#ssg-search-input{border:1px solid CanvasText}
#ssg-search-input:focus{outline:2px solid Highlight}
.ssg-result:focus,.ssg-result.active{outline:2px solid Highlight}
.ssg-result-snippet mark{background:Highlight;color:HighlightText}
}
.ssg-search-footer{display:flex;gap:16px;padding:10px 20px;font-size:12px;color:#595960;border-top:1px solid #e5e7eb;justify-content:flex-end}
.ssg-search-footer kbd{font-family:inherit;font-size:11px;padding:1px 5px;background:#f3f4f6;border:1px solid #e5e7eb;border-radius:3px}
/* ── Dark mode (media query + data-theme attribute) ── */
@media(prefers-color-scheme:dark){
:root:not([data-theme="light"]) #ssg-search-btn{background:#1f2937;border-color:#374151;color:#cccccf}
:root:not([data-theme="light"]) #ssg-search-btn:hover{border-color:#4b5563}
:root:not([data-theme="light"]) #ssg-search-btn kbd{background:#374151;border-color:#4b5563;color:#cccccf}
:root:not([data-theme="light"]) #ssg-search-box{background:#1f2937;color:#f9fafb}
:root:not([data-theme="light"]) #ssg-search-header{border-color:#374151}
:root:not([data-theme="light"]) #ssg-search-input{color:#f9fafb}
:root:not([data-theme="light"]) .ssg-result{color:#f9fafb;border-color:#374151}
:root:not([data-theme="light"]) .ssg-result:hover,:root:not([data-theme="light"]) .ssg-result.active{background:#374151}
:root:not([data-theme="light"]) .ssg-result-snippet{color:#cccccf}
:root:not([data-theme="light"]) .ssg-result-snippet mark{background:#854d0e;color:#fef08a}
:root:not([data-theme="light"]) .ssg-no-results{color:#cccccf}
:root:not([data-theme="light"]) .ssg-search-footer{border-color:#374151;color:#cccccf}
:root:not([data-theme="light"]) .ssg-search-footer kbd{background:#374151;border-color:#4b5563}
}
[data-theme="dark"] #ssg-search-btn{background:#1f2937;border-color:#374151;color:#cccccf}
[data-theme="dark"] #ssg-search-btn:hover{border-color:#4b5563}
[data-theme="dark"] #ssg-search-btn kbd{background:#374151;border-color:#4b5563;color:#cccccf}
[data-theme="dark"] #ssg-search-box{background:#1f2937;color:#f9fafb}
[data-theme="dark"] #ssg-search-header{border-color:#374151}
[data-theme="dark"] #ssg-search-input{color:#f9fafb}
[data-theme="dark"] .ssg-result{color:#f9fafb;border-color:#374151}
[data-theme="dark"] .ssg-result:hover,[data-theme="dark"] .ssg-result.active{background:#374151}
[data-theme="dark"] .ssg-result-snippet{color:#cccccf}
[data-theme="dark"] .ssg-result-snippet mark{background:#854d0e;color:#fef08a}
[data-theme="dark"] .ssg-no-results{color:#cccccf}
[data-theme="dark"] .ssg-search-footer{border-color:#374151;color:#cccccf}
[data-theme="dark"] .ssg-search-footer kbd{background:#374151;border-color:#4b5563}
</style>
<!-- Search trigger button -->
<button id="ssg-search-btn" type="button" aria-label="Search">
<svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
<span>Search</span>
<kbd>K</kbd>
</button>
<!-- Search modal -->
<div id="ssg-search-overlay" role="dialog" aria-label="Search">
<div id="ssg-search-box">
<div id="ssg-search-header">
<svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
<input id="ssg-search-input" type="search" placeholder="Search documentation..." autocomplete="off" aria-label="Search"/>
</div>
<div id="ssg-search-results" aria-live="polite"></div>
<div id="ssg-sr-status" role="status" aria-live="polite" aria-atomic="true"></div>
<div class="ssg-search-footer"><span><kbd>Esc</kbd> close</span><span><kbd>↑</kbd><kbd>↓</kbd> navigate</span><span><kbd>Enter</kbd> open</span></div>
</div>
</div>
<script>
(function(){
var idx=null,overlay=document.getElementById('ssg-search-overlay'),
input=document.getElementById('ssg-search-input'),
results=document.getElementById('ssg-search-results'),
btn=document.getElementById('ssg-search-btn'),active=-1,
lm=location.pathname.match(/^\/(en|fr|ar|bn|cs|de|es|ha|he|hi|id|it|ja|ko|nl|pl|pt|ro|ru|sv|th|tl|tr|uk|vi|yo|zh-tw|zh)\//),
lp=lm?'/'+lm[1]:'';
function load(){if(idx)return Promise.resolve();var sp=lm?'/'+lm[1]+'/search-index.json':'/search-index.json';return fetch(sp).then(function(r){return r.json()}).then(function(d){idx=d.entries||[]}).catch(function(){idx=[]})}
function open(){load().then(function(){overlay.classList.add('active');input.value='';results.innerHTML='';input.focus();active=-1})}
function close(){overlay.classList.remove('active');active=-1}
function highlight(text,q){if(!q)return esc(text);var re=new RegExp('('+q.replace(/[.*+?^${}()|[\]\\]/g,'\\$&')+')','gi');return esc(text).replace(re,'<mark>$1</mark>')}
function esc(s){var d=document.createElement('div');d.textContent=s;return d.innerHTML}
function snippet(content,q,len){len=len||150;if(!q)return esc(content.substring(0,len));var i=content.toLowerCase().indexOf(q.toLowerCase());if(i<0)return esc(content.substring(0,len));var s=Math.max(0,i-50),e=Math.min(content.length,i+len);var t=(s>0?'...':'')+content.substring(s,e)+(e<content.length?'...':'');return highlight(t,q)}
function search(q){if(!idx||!q){results.innerHTML='';return}q=q.trim();if(!q){results.innerHTML='';return}var ql=q.toLowerCase(),hits=[];
for(var i=0;i<idx.length&&hits.length<20;i++){var e=idx[i],s=0;if(e.title.toLowerCase().indexOf(ql)>=0)s+=10;if(e.content.toLowerCase().indexOf(ql)>=0)s+=5;for(var h=0;h<e.headings.length;h++){if(e.headings[h].toLowerCase().indexOf(ql)>=0){s+=3;break}}if(s>0)hits.push({entry:e,score:s})}
hits.sort(function(a,b){return b.score-a.score});
var sr=document.getElementById('ssg-sr-status');
if(!hits.length){results.innerHTML='<div class="ssg-no-results" role="status">No results for ““\'+esc(q)+\'””</div>';if(sr)sr.textContent='No results found';return}
var html='';for(var j=0;j<hits.length;j++){var e=hits[j].entry;html+='<a class="ssg-result" href="'+esc(lp+e.url)+'">'+'<div class="ssg-result-title">'+highlight(e.title,q)+'</div>'+'<div class="ssg-result-snippet">'+snippet(e.content,q)+'</div></a>'}
results.innerHTML=html;active=-1;if(sr)sr.textContent=hits.length+' result'+(hits.length===1?'':'s')+' found'}
function nav(dir){var items=results.querySelectorAll('.ssg-result');if(!items.length)return;if(active>=0&&items[active])items[active].classList.remove('active');active+=dir;if(active<0)active=items.length-1;if(active>=items.length)active=0;items[active].classList.add('active');items[active].scrollIntoView({block:'nearest'})}
btn.addEventListener('click',function(){open()});
input.addEventListener('input',function(){search(this.value)});
overlay.addEventListener('click',function(e){if(e.target===overlay)close()});
document.addEventListener('keydown',function(e){if((e.ctrlKey||e.metaKey)&&e.key==='k'){e.preventDefault();if(overlay.classList.contains('active'))close();else open()}
if(!overlay.classList.contains('active'))return;if(e.key==='Escape')close();if(e.key==='ArrowDown'){e.preventDefault();nav(1)}if(e.key==='ArrowUp'){e.preventDefault();nav(-1)}
if(e.key==='Enter'){e.preventDefault();var items=results.querySelectorAll('.ssg-result');if(active>=0&&items[active])window.location=items[active].href;else if(items[0])window.location=items[0].href}})
})();
</script>
</div>
</body></html>