diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..8a422f8 --- /dev/null +++ b/404.html @@ -0,0 +1,37 @@ + + + + + + Page not found — New Chapter + + + + + + + + + + + + +
+

Error 404

+

This page hasn’t been written yet.

+

The link may be old, or the page may have moved. Let’s get you back to the first chapter.

+ Back to the homepage +
+ + diff --git a/README.md b/README.md index 985349d..c2051e0 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,48 @@ -![New Chapter Technology LLC logo](src/nc_logo.png) - +New Chapter # Official Website -This is the official website for New Chapter Technology LLC, located in Pinedale, WY, that is mainly focused on software development specializes in web and mobile applications. +This is the official website of New Chapter Technology LLC — a technology company in Pinedale, WY that builds its own products and partners with teams on AI, training, consulting and security. The site is live at [newchapter.tech](https://newchapter.tech). ## Table of Contents - [About Us](#about-us) +- [Products](#products) - [Services](#services) - [Jobs](#jobs) - [Contact](#contact) +- [Development](#development) +- [Brand assets](#brand-assets) - [Contributing](#contributing) - [License](#license) ## About Us -New Chapter is a technology company that specializes in creating innovative solutions for businesses. Our mission is to help our clients achieve their goals through the use of cutting-edge technology and exceptional customer service. With a team of experienced developers, designers, and project managers, we are dedicated to delivering high-quality products that exceed our clients' expectations. +Every company has a next chapter — we help you write it. New Chapter builds its own products, starting with LangX, and brings the same craft to client work: AI solutions, AI training, technology consulting, security and app development. -At New Chapter, we believe that technology should be accessible to everyone. That's why we work closely with our clients to understand their unique needs and develop solutions that are tailored to their specific requirements. Whether you need a custom web application, a mobile app, or a complete software solution, we have the expertise and experience to deliver results. +We love open source and actively contribute to the community. LangX itself is 100% open source. -Our team is passionate about technology and committed to staying up-to-date with the latest trends and developments in the industry. We are constantly exploring new technologies and techniques to ensure that we are providing our clients with the best possible solutions. +## Products -In addition, we love open-source and actively contribute to the community. We believe that open-source software is a powerful tool for innovation and collaboration, and we are committed to giving back to the community that has given us so much. +- **LangX** — a free, open-source language exchange app that connects learners with native speakers, with voice messages, smart partner filters and an AI Language Copilot. Available on the [App Store](https://apps.apple.com/us/app/langx-practice-learn-succeed/id6474187141), [Google Play](https://play.google.com/store/apps/details?id=tech.newchapter.languageXchange) and the [web](https://langx.io). +- More products are in development. ## Services -New Chapter Technology LLC specializes in web and mobile application development. Our services include: - -- Custom web application development -- Mobile app development -- Software consulting -- UI/UX design -- Project management -- Cloud computing solutions - -We work closely with our clients to understand their unique needs and develop solutions that are tailored to their specific requirements. Whether you need a simple website or a complex software solution, we have the expertise and experience to deliver results. - -We also offer cloud computing solutions, including AWS and Azure, to help our clients scale their applications and reduce costs. +- AI solutions — custom assistants, automations and models trained on your data +- AI training for teams +- Personalized (one-to-one) AI training +- Technology consulting +- Security +- App & web development ## Jobs We are currently hiring for the following positions: -- Full Stack Developer -- Mobile App Developer -- UI/UX Designer -- Project Manager +- Senior React Native Engineer — Product · LangX (Remote, full-time) +- AI / ML Engineer — AI Solutions (Remote, full-time) +- Security Consultant — Security (Remote, contract) If you are interested in any of these positions, please send your resume and cover letter to [jobs@newchapter.tech](mailto:jobs@newchapter.tech). @@ -55,6 +51,44 @@ If you are interested in any of these positions, please send your resume and cov - Email us at [info@newchapter.tech](mailto:info@newchapter.tech) - Address: 432 W Pine St, Pinedale, WY 82941, USA +## Development + +The site is plain, dependency-free HTML, CSS and a few lines of JavaScript, served by GitHub Pages (`.nojekyll` turns off Jekyll processing). To preview it locally: + +```sh +python3 -m http.server 8000 +# then open http://localhost:8000 +``` + +| Path | What it is | +| --- | --- | +| `index.html` | The homepage | +| `404.html` | The "page not found" page served by GitHub Pages | +| `assets/css/site.css` | All styles, including the self-hosted `@font-face` rules | +| `assets/js/site.js` | Mobile menu and footer year | +| `assets/fonts/` | Instrument Serif and Instrument Sans (SIL Open Font License 1.1) | +| `assets/brand/` | Logo, mark and app icons | +| `favicon.svg`, `favicon.ico`, `apple-touch-icon.png`, `site.webmanifest` | Browser and device icons | +| `og-image.png` | Social sharing image (1200 × 630) | + +## Brand assets + +The logo pairs the "Ribbon N" mark — an N whose right stroke is a bookmark ribbon, marking where the next chapter begins — with a wordmark set in Instrument Serif. + +| Asset | File | +| --- | --- | +| Logo (for light backgrounds) | `assets/brand/newchapter-logo.svg` | +| Logo (for dark backgrounds) | `assets/brand/newchapter-logo-reversed.svg` | +| Mark | `assets/brand/newchapter-mark.svg`, `assets/brand/newchapter-mark-reversed.svg` | +| App icon | `assets/brand/newchapter-app-icon.svg`, `assets/brand/icon-512.png` | + +| Color | Hex | +| --- | --- | +| Paper | `#FAFAF7` | +| Ink | `#16181D` | +| Graphite | `#5B5F68` | +| Vermilion | `#C8341A` (`#E2553A` / `#FF8A70` on dark backgrounds) | + ## Contributing We welcome contributions to our website! If you would like to contribute, please follow these steps: @@ -66,10 +100,8 @@ We welcome contributions to our website! If you would like to contribute, please 5. Push to the branch (`git push origin feature/your-feature-name`) 6. Create a new Pull Request -Alternatively, if you have found a bug or have a feature request, please create an issue on our [GitHub repository](https://github.com/newchaptertech/website/issues) or email us at info@newchapter.com. - -Please make sure to update tests as appropriate. +Alternatively, if you have found a bug or have a feature request, please create an issue on our [GitHub repository](https://github.com/newchaptertech/website/issues) or email us at info@newchapter.tech. ## License -This project is licensed under the [MIT License](LICENSE.md). +This project is licensed under the [MIT License](LICENSE). The Instrument Serif and Instrument Sans fonts in `assets/fonts/` are licensed under the SIL Open Font License 1.1. diff --git a/apple-touch-icon.png b/apple-touch-icon.png new file mode 100644 index 0000000..17a8861 Binary files /dev/null and b/apple-touch-icon.png differ diff --git a/assets/brand/icon-192.png b/assets/brand/icon-192.png new file mode 100644 index 0000000..f976668 Binary files /dev/null and b/assets/brand/icon-192.png differ diff --git a/assets/brand/icon-512.png b/assets/brand/icon-512.png new file mode 100644 index 0000000..20e328a Binary files /dev/null and b/assets/brand/icon-512.png differ diff --git a/assets/brand/newchapter-app-icon.svg b/assets/brand/newchapter-app-icon.svg new file mode 100644 index 0000000..5fcfcff --- /dev/null +++ b/assets/brand/newchapter-app-icon.svg @@ -0,0 +1 @@ + diff --git a/assets/brand/newchapter-logo-reversed.svg b/assets/brand/newchapter-logo-reversed.svg new file mode 100644 index 0000000..9e9b6c2 --- /dev/null +++ b/assets/brand/newchapter-logo-reversed.svg @@ -0,0 +1 @@ +New Chapter diff --git a/assets/brand/newchapter-logo.svg b/assets/brand/newchapter-logo.svg new file mode 100644 index 0000000..6c93bf5 --- /dev/null +++ b/assets/brand/newchapter-logo.svg @@ -0,0 +1 @@ +New Chapter diff --git a/assets/brand/newchapter-mark-reversed.svg b/assets/brand/newchapter-mark-reversed.svg new file mode 100644 index 0000000..7651439 --- /dev/null +++ b/assets/brand/newchapter-mark-reversed.svg @@ -0,0 +1 @@ +New Chapter diff --git a/assets/brand/newchapter-mark.svg b/assets/brand/newchapter-mark.svg new file mode 100644 index 0000000..891a68b --- /dev/null +++ b/assets/brand/newchapter-mark.svg @@ -0,0 +1 @@ +New Chapter diff --git a/assets/css/site.css b/assets/css/site.css new file mode 100644 index 0000000..6e175e9 --- /dev/null +++ b/assets/css/site.css @@ -0,0 +1,1156 @@ +/* + * New Chapter — site styles + * Typefaces: Instrument Serif & Instrument Sans (SIL Open Font License 1.1, see /assets/fonts) + */ + +/* ========================================================================== + Fonts (self-hosted) + ========================================================================== */ + +@font-face { + font-family: "Instrument Sans"; + font-style: normal; + font-weight: 400 600; + font-display: swap; + src: url("../fonts/instrument-sans-latin-ext.woff2") format("woff2"); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: "Instrument Sans"; + font-style: normal; + font-weight: 400 600; + font-display: swap; + src: url("../fonts/instrument-sans-latin.woff2") format("woff2"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: "Instrument Serif"; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url("../fonts/instrument-serif-italic-latin-ext.woff2") format("woff2"); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: "Instrument Serif"; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url("../fonts/instrument-serif-italic-latin.woff2") format("woff2"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: "Instrument Serif"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../fonts/instrument-serif-latin-ext.woff2") format("woff2"); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +@font-face { + font-family: "Instrument Serif"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../fonts/instrument-serif-latin.woff2") format("woff2"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* ========================================================================== + Tokens + ========================================================================== */ + +:root { + --paper: #fafaf7; + --paper-2: #f1f0ea; + --paper-3: #f4f3ee; + --ink: #16181d; + --graphite: #5b5f68; + --rule: #e4e3dc; + --rule-2: #d6d5cc; + --dots: #b9b8b0; + --accent: #c8341a; + --accent-deep: #a92b14; + --night: #16181d; + --night-muted: #a9acb4; + --night-rule: #34373f; + --accent-on-night: #ff8a70; + + --serif: "Instrument Serif", "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif; + --sans: "Instrument Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif; + + --container: 1200px; + --gutter: clamp(20px, 4vw, 32px); + --header-h: 76px; + --ease: cubic-bezier(0.2, 0.7, 0.2, 1); + + color-scheme: light; +} + +/* ========================================================================== + Base + ========================================================================== */ + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + -webkit-text-size-adjust: 100%; + text-size-adjust: 100%; + scroll-behavior: smooth; + scroll-padding-top: calc(var(--header-h) + 16px); +} + +body { + margin: 0; + background: var(--paper); + color: var(--ink); + font-family: var(--sans); + font-size: 1.0625rem; + line-height: 1.65; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; +} + +h1, +h2, +h3, +p, +dl, +dd { + margin: 0; +} + +img, +svg { + display: block; + max-width: 100%; +} + +a { + color: inherit; + text-decoration: none; + transition: color 0.2s ease, background-color 0.2s ease, border-color 0.2s ease; +} + +a:hover { + color: var(--accent); +} + +:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 3px; + border-radius: 2px; +} + +ul, +ol { + list-style: none; + margin: 0; + padding: 0; +} + +::selection { + background: var(--accent); + color: #fff; +} + +.container { + width: 100%; + max-width: calc(var(--container) + 2 * var(--gutter)); + margin-inline: auto; + padding-inline: var(--gutter); +} + +.visually-hidden { + position: absolute !important; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0 0 0 0); + white-space: nowrap; + border: 0; +} + +.skip-link { + position: absolute; + left: 16px; + top: -64px; + z-index: 100; + padding: 10px 18px; + border-radius: 999px; + background: var(--ink); + color: var(--paper); + font-weight: 500; +} + +.skip-link:focus { + top: 12px; + color: var(--paper); +} + +/* ========================================================================== + Shared pieces + ========================================================================== */ + +.kicker { + font-size: 0.8125rem; + font-weight: 500; + letter-spacing: 0.18em; + line-height: 1.4; + text-transform: uppercase; + color: var(--graphite); +} + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 10px; + min-height: 48px; + padding: 0 26px; + border-radius: 999px; + font-size: 1rem; + font-weight: 500; + line-height: 1; + white-space: nowrap; +} + +.btn-ink { + background: var(--ink); + color: var(--paper); +} + +.btn-ink:hover { + background: var(--accent); + color: #fff; +} + +.btn-accent { + background: var(--accent); + color: #fff; +} + +.btn-accent:hover { + background: var(--accent-deep); + color: #fff; +} + +.text-link { + display: inline-flex; + align-items: center; + min-height: 44px; + border-bottom: 1px solid currentColor; + line-height: 1.2; +} + +.arrow { + display: inline-block; + transition: transform 0.25s var(--ease); +} + +a:hover .arrow { + transform: translateX(4px); +} + +.section { + padding-block: clamp(80px, 10vw, 128px); +} + +.section--tinted { + background: var(--paper-2); + border-block: 1px solid var(--rule); +} + +.chapter-label { + display: flex; + flex-wrap: wrap; + align-items: baseline; + gap: 8px 20px; + padding-bottom: 20px; + border-bottom: 1px solid var(--rule-2); + font-weight: 400; +} + +.chapter-label .chapter { + font-family: var(--serif); + font-size: 1.375rem; + line-height: 1.2; + color: var(--accent); +} + +.section-title { + margin-top: clamp(40px, 5vw, 56px); + max-width: 15em; + font-family: var(--serif); + font-size: clamp(2.5rem, 4.6vw + 0.5rem, 4.25rem); + font-weight: 400; + line-height: 1; + letter-spacing: -0.02em; + text-wrap: balance; +} + +/* ========================================================================== + Header + ========================================================================== */ + +.site-header { + position: sticky; + top: 0; + z-index: 50; + background: rgba(250, 250, 247, 0.92); + -webkit-backdrop-filter: saturate(1.4) blur(12px); + backdrop-filter: saturate(1.4) blur(12px); + border-bottom: 1px solid var(--rule); +} + +.site-header > .container { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + gap: 12px 24px; + min-height: var(--header-h); + padding-block: 16px; +} + +.brand { + display: inline-flex; + align-items: center; + min-height: 44px; +} + +.brand img { + width: auto; + height: 36px; +} + +.nav-list { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 8px 32px; + font-size: 0.9375rem; +} + +.nav-list a:not(.btn) { + display: inline-flex; + align-items: center; + min-height: 44px; +} + +.nav-list .btn { + min-height: 44px; + padding-inline: 22px; + font-size: 0.9375rem; +} + +.nav-toggle { + display: none; + align-items: center; + justify-content: center; + width: 44px; + height: 44px; + margin-right: -10px; + padding: 0; + border: 0; + background: transparent; + color: var(--ink); + cursor: pointer; +} + +.nav-toggle-bars, +.nav-toggle-bars::before { + display: block; + width: 22px; + height: 1.5px; + background: currentColor; + transition: transform 0.25s var(--ease); +} + +.nav-toggle-bars { + position: relative; + transform: translateY(-4px); +} + +.nav-toggle-bars::before { + content: ""; + position: absolute; + top: 8px; +} + +.is-open .nav-toggle-bars { + transform: translateY(0) rotate(45deg); +} + +.is-open .nav-toggle-bars::before { + transform: translateY(-8px) rotate(-90deg); +} + +@media (max-width: 760px) { + .js .nav-toggle { + display: inline-flex; + } + + .js .site-nav { + display: none; + flex-basis: 100%; + padding-bottom: 8px; + } + + .js .is-open .site-nav { + display: block; + } + + .js .nav-list { + flex-direction: column; + align-items: stretch; + gap: 0; + font-size: 1.0625rem; + } + + .js .nav-list a:not(.btn) { + display: flex; + min-height: 52px; + border-bottom: 1px solid var(--rule); + } + + .js .nav-list li:last-child { + padding-top: 16px; + } + + .js .nav-list .btn { + width: 100%; + min-height: 52px; + } +} + +/* ========================================================================== + Hero + ========================================================================== */ + +.hero > .container { + display: grid; + grid-template-columns: minmax(0, 1.3fr) minmax(0, 0.85fr); + align-items: end; + gap: clamp(56px, 7vw, 104px); + padding-block: clamp(64px, 9vw, 120px) clamp(72px, 9vw, 120px); +} + +.hero h1 { + margin-top: 28px; + font-family: var(--serif); + font-size: clamp(3rem, 5.2vw + 0.75rem, 5.75rem); + font-weight: 400; + line-height: 0.98; + letter-spacing: -0.02em; + text-wrap: pretty; +} + +.hero h1 .line { + display: block; +} + +.hero h1 em { + color: var(--accent); +} + +.hero .lede { + margin-top: 28px; + max-width: 33em; + font-size: 1.1875rem; + line-height: 1.6; + color: var(--graphite); + text-wrap: pretty; +} + +.hero .actions { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 16px 28px; + margin-top: 36px; +} + +.toc { + padding-top: 18px; + border-top: 2px solid var(--ink); +} + +.toc-title { + padding-bottom: 6px; + font-family: var(--serif); + font-size: 1.75rem; + font-style: italic; + line-height: 1.3; +} + +.toc a { + display: flex; + align-items: baseline; + gap: 12px; + padding: 15px 0; + border-bottom: 1px solid var(--rule); + font-size: 1.0625rem; + line-height: 1.4; +} + +.toc .num { + flex: none; + width: 2.25rem; + font-family: var(--serif); + font-size: 1.375rem; + color: var(--accent); +} + +.toc .leader { + flex: 1; + min-width: 20px; + border-bottom: 1px dotted var(--dots); + transform: translateY(-5px); +} + +.toc .page { + color: var(--graphite); + font-variant-numeric: tabular-nums; +} + +.toc a:hover .leader { + border-bottom-color: var(--accent); +} + +@keyframes nc-rise { + from { + opacity: 0; + transform: translateY(16px); + } + to { + opacity: 1; + transform: none; + } +} + +.reveal { + animation: nc-rise 0.9s var(--ease) both; +} + +.reveal:nth-child(2) { animation-delay: 0.08s; } +.reveal:nth-child(3) { animation-delay: 0.16s; } +.reveal:nth-child(4) { animation-delay: 0.24s; } +.toc.reveal { animation-delay: 0.32s; } + +@media (max-width: 900px) { + .hero > .container { + grid-template-columns: minmax(0, 1fr); + } +} + +/* ========================================================================== + Products + ========================================================================== */ + +.product { + display: grid; + grid-template-columns: minmax(0, 1.1fr) minmax(0, 0.9fr); + align-items: center; + gap: clamp(56px, 7vw, 96px); + margin-top: clamp(48px, 6vw, 72px); +} + +.product-name { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 12px 20px; + font-family: var(--serif); + font-size: clamp(4rem, 8vw + 1rem, 8rem); + font-weight: 400; + line-height: 0.9; + letter-spacing: -0.03em; +} + +.status { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 6px 12px; + border: 1px solid var(--ink); + border-radius: 999px; + font-family: var(--sans); + font-size: 0.75rem; + font-weight: 600; + letter-spacing: 0.14em; + line-height: 1; + text-transform: uppercase; +} + +.status::before { + content: ""; + width: 7px; + height: 7px; + border-radius: 50%; + background: var(--accent); +} + +.product-tagline { + margin-top: 24px; + font-family: var(--serif); + font-size: clamp(1.625rem, 2.2vw + 0.75rem, 2.125rem); + font-style: italic; + line-height: 1.2; +} + +.product-desc { + margin-top: 20px; + max-width: 31em; + color: var(--graphite); + text-wrap: pretty; +} + +.store-links { + display: flex; + flex-wrap: wrap; + gap: 10px; + margin-top: 32px; +} + +.chip-link { + display: inline-flex; + align-items: center; + gap: 8px; + min-height: 46px; + padding: 0 20px; + border: 1px solid var(--ink); + border-radius: 999px; + font-size: 0.9375rem; + font-weight: 500; +} + +.chip-link:hover { + background: var(--ink); + color: var(--paper); +} + +.chip-link svg { + width: 18px; + height: 18px; +} + +/* Phone illustration (decorative) */ + +.product-visual { + position: relative; + display: flex; + justify-content: center; + padding-block: 24px; +} + +/* A bookmark ribbon hanging from the bottom of the phone */ +.product-visual::before { + content: ""; + position: absolute; + top: 45%; + left: calc(50% + 64px); + width: 40px; + height: calc(55% + 36px); + background: var(--accent); + clip-path: polygon(0 0, 100% 0, 100% 100%, 50% calc(100% - 22px), 0 100%); +} + +.phone { + position: relative; + width: min(300px, 78vw); + aspect-ratio: 300 / 540; + padding: 10px; + border-radius: 46px; + background: var(--ink); + box-shadow: 0 40px 70px -40px rgba(22, 24, 29, 0.55); +} + +.phone-screen { + display: flex; + flex-direction: column; + gap: 12px; + height: 100%; + padding: 26px 18px 18px; + border-radius: 37px; + background: #fff; + overflow: hidden; +} + +.phone-title { + padding: 4px 4px 8px; + font-family: var(--serif); + font-size: 1.75rem; + line-height: 1.1; +} + +.partner { + display: flex; + align-items: center; + gap: 12px; + padding: 12px; + border-radius: 16px; + background: var(--paper-3); + line-height: 1.3; +} + +.avatar { + display: grid; + place-items: center; + flex: none; + width: 40px; + height: 40px; + border-radius: 50%; + font-size: 0.875rem; + font-weight: 600; +} + +.avatar--a { background: #e9dccb; } +.avatar--b { background: #d9e2dc; } +.avatar--c { background: #e6d6dc; } + +.partner strong { + display: block; + font-size: 0.875rem; +} + +.partner span { + font-size: 0.75rem; + color: var(--graphite); +} + +.voice { + display: flex; + align-items: center; + gap: 10px; + align-self: flex-start; + width: 88%; + margin-top: 4px; + padding: 10px 14px 10px 10px; + border-radius: 18px 18px 18px 6px; + background: var(--ink); + color: var(--paper); +} + +.voice-play { + position: relative; + flex: none; + width: 28px; + height: 28px; + border-radius: 50%; + background: var(--accent); +} + +.voice-play::after { + content: ""; + position: absolute; + top: 9px; + left: 11px; + border-style: solid; + border-width: 5px 0 5px 8px; + border-color: transparent transparent transparent #fff; +} + +.voice-wave { + flex: 1; + min-width: 0; + height: 22px; + color: #8c9099; +} + +.voice-time { + font-size: 0.75rem; + color: var(--night-muted); + font-variant-numeric: tabular-nums; +} + +.copilot { + margin-top: auto; + padding: 14px; + border: 1px solid var(--accent); + border-radius: 16px; + font-size: 0.8125rem; + line-height: 1.5; +} + +.copilot b { + color: var(--accent); + font-weight: 600; +} + +.forthcoming { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(320px, 100%), 1fr)); + margin-top: clamp(64px, 8vw, 96px); + border-top: 1px solid var(--rule-2); +} + +.forthcoming-item { + display: flex; + flex-direction: column; + gap: 8px; + padding: 28px 28px 0 0; +} + +.forthcoming-item + .forthcoming-item { + padding-left: 28px; + border-left: 1px solid var(--rule-2); +} + +.forthcoming-item h3 { + margin: 0; + font-family: var(--serif); + font-size: 1.875rem; + font-weight: 400; + line-height: 1.15; +} + +.forthcoming-item p { + color: var(--graphite); + font-size: 0.9375rem; +} + +@media (max-width: 900px) { + .product { + grid-template-columns: minmax(0, 1fr); + } +} + +@media (max-width: 720px) { + .forthcoming-item + .forthcoming-item { + padding-left: 0; + border-left: 0; + margin-top: 28px; + border-top: 1px solid var(--rule-2); + } +} + +/* ========================================================================== + Services + ========================================================================== */ + +.service-list { + margin-top: clamp(40px, 5vw, 56px); + border-bottom: 1px solid var(--rule); +} + +.service { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + align-items: baseline; + gap: 12px 48px; + padding-block: 32px; + border-top: 1px solid var(--rule); +} + +.service-head { + display: flex; + align-items: baseline; + gap: 24px; +} + +.service .num { + flex: none; + width: 1.75rem; + font-family: var(--serif); + font-size: 1.25rem; + color: var(--accent); + font-variant-numeric: tabular-nums; +} + +.service h3 { + font-family: var(--serif); + font-size: clamp(1.875rem, 2.4vw + 0.75rem, 2.375rem); + font-weight: 400; + line-height: 1.1; + letter-spacing: -0.01em; +} + +.service p { + max-width: 34em; + color: var(--graphite); + text-wrap: pretty; +} + +@media (max-width: 760px) { + .service { + grid-template-columns: minmax(0, 1fr); + } + + .service p { + padding-left: calc(1.75rem + 24px); + } +} + +/* ========================================================================== + Careers + ========================================================================== */ + +.section--night { + background: var(--night); + color: var(--paper); +} + +.section--night .chapter-label { + border-bottom-color: var(--night-rule); +} + +.section--night .chapter { + color: var(--accent-on-night); +} + +.section--night .kicker { + color: var(--night-muted); +} + +.section--night a:hover { + color: var(--accent-on-night); +} + +.section--night :focus-visible { + outline-color: var(--accent-on-night); +} + +.careers-grid { + display: grid; + grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr); + align-items: start; + gap: clamp(40px, 6vw, 80px); + margin-top: clamp(40px, 5vw, 56px); +} + +.careers-grid .section-title { + margin-top: 0; +} + +.careers-note { + margin-top: 24px; + max-width: 28em; + color: var(--night-muted); +} + +.careers-note a { + color: var(--paper); + border-bottom: 1px solid currentColor; +} + +.role-list { + border-bottom: 1px solid var(--night-rule); +} + +.role a { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + align-items: center; + gap: 6px 24px; + padding-block: 26px; + border-top: 1px solid var(--night-rule); + color: var(--paper); +} + +.role h3 { + font-family: var(--serif); + font-size: clamp(1.625rem, 1.8vw + 0.75rem, 2rem); + font-weight: 400; + line-height: 1.15; + transition: color 0.2s ease; +} + +.role-meta { + grid-column: 1; + color: var(--night-muted); + font-size: 0.9375rem; +} + +.role-cta { + grid-column: 2; + grid-row: 1 / span 2; + display: inline-flex; + align-items: center; + gap: 8px; + color: var(--accent-on-night); + font-size: 0.9375rem; + font-weight: 500; + white-space: nowrap; +} + +.role a:hover h3 { + color: var(--accent-on-night); +} + +@media (max-width: 900px) { + .careers-grid { + grid-template-columns: minmax(0, 1fr); + } +} + +@media (max-width: 480px) { + .role a { + grid-template-columns: minmax(0, 1fr); + } + + .role-cta { + grid-column: 1; + grid-row: auto; + margin-top: 6px; + } +} + +/* ========================================================================== + Contact + footer + ========================================================================== */ + +.contact { + padding-top: clamp(96px, 12vw, 144px); +} + +.contact-head { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; +} + +.contact-head .mark { + width: 46px; + height: auto; +} + +.contact-head h2 { + max-width: 11em; + margin-top: 32px; + font-family: var(--serif); + font-size: clamp(3rem, 6vw + 0.75rem, 6rem); + font-weight: 400; + line-height: 0.96; + letter-spacing: -0.02em; + text-wrap: balance; +} + +.contact-head h2 em { + color: var(--accent); +} + +.contact-head .lede { + max-width: 30em; + margin-top: 24px; + color: var(--graphite); + text-wrap: pretty; +} + +.contact-email { + display: inline-flex; + align-items: center; + min-height: 48px; + margin-top: 28px; + border-bottom: 2px solid var(--accent); + font-size: clamp(1.25rem, 1.2vw + 0.9rem, 1.5rem); + line-height: 1.2; +} + +.contact-details { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr)); + gap: 0 32px; + margin-top: clamp(64px, 8vw, 96px); + border-top: 1px solid var(--rule); +} + +.contact-details div { + display: flex; + flex-direction: column; + gap: 6px; + padding-block: clamp(18px, 3vw, 28px); +} + +.contact-details dd { + font-size: 1.0625rem; +} + +.contact-details a { + border-bottom: 1px solid var(--rule-2); +} + +.site-footer { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + gap: 16px 32px; + padding-block: 28px 40px; + border-top: 1px solid var(--rule); + font-size: 0.875rem; + color: var(--graphite); +} + +.site-footer .brand img { + height: 28px; +} + +.footer-links { + display: flex; + flex-wrap: wrap; + gap: 4px 24px; +} + +.footer-links a { + display: inline-flex; + align-items: center; + min-height: 44px; +} + +/* ========================================================================== + Not found page + ========================================================================== */ + +.not-found { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 24px; + padding-block: clamp(96px, 14vw, 176px); +} + +.not-found h1 { + max-width: 12em; + font-family: var(--serif); + font-size: clamp(3rem, 6vw + 0.75rem, 5.75rem); + font-weight: 400; + line-height: 0.98; + letter-spacing: -0.02em; + text-wrap: balance; +} + +.not-found h1 em { + color: var(--accent); +} + +.not-found p { + max-width: 30em; + color: var(--graphite); +} + +/* ========================================================================== + Motion preferences + ========================================================================== */ + +@media (prefers-reduced-motion: reduce) { + html { + scroll-behavior: auto; + } + + *, + *::before, + *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } +} diff --git a/assets/fonts/InstrumentSans-OFL.txt b/assets/fonts/InstrumentSans-OFL.txt new file mode 100644 index 0000000..26bd2f9 --- /dev/null +++ b/assets/fonts/InstrumentSans-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2022 The Instrument Sans Project Authors (https://github.com/Instrument/instrument-sans) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/fonts/InstrumentSerif-OFL.txt b/assets/fonts/InstrumentSerif-OFL.txt new file mode 100644 index 0000000..669ce79 --- /dev/null +++ b/assets/fonts/InstrumentSerif-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2022 The Instrument Serif Project Authors (https://github.com/Instrument/instrument-serif) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/fonts/instrument-sans-latin-ext.woff2 b/assets/fonts/instrument-sans-latin-ext.woff2 new file mode 100644 index 0000000..0ea0da0 Binary files /dev/null and b/assets/fonts/instrument-sans-latin-ext.woff2 differ diff --git a/assets/fonts/instrument-sans-latin.woff2 b/assets/fonts/instrument-sans-latin.woff2 new file mode 100644 index 0000000..8611e41 Binary files /dev/null and b/assets/fonts/instrument-sans-latin.woff2 differ diff --git a/assets/fonts/instrument-serif-italic-latin-ext.woff2 b/assets/fonts/instrument-serif-italic-latin-ext.woff2 new file mode 100644 index 0000000..1f71909 Binary files /dev/null and b/assets/fonts/instrument-serif-italic-latin-ext.woff2 differ diff --git a/assets/fonts/instrument-serif-italic-latin.woff2 b/assets/fonts/instrument-serif-italic-latin.woff2 new file mode 100644 index 0000000..197abca Binary files /dev/null and b/assets/fonts/instrument-serif-italic-latin.woff2 differ diff --git a/assets/fonts/instrument-serif-latin-ext.woff2 b/assets/fonts/instrument-serif-latin-ext.woff2 new file mode 100644 index 0000000..0caad58 Binary files /dev/null and b/assets/fonts/instrument-serif-latin-ext.woff2 differ diff --git a/assets/fonts/instrument-serif-latin.woff2 b/assets/fonts/instrument-serif-latin.woff2 new file mode 100644 index 0000000..0ad6971 Binary files /dev/null and b/assets/fonts/instrument-serif-latin.woff2 differ diff --git a/assets/js/site.js b/assets/js/site.js new file mode 100644 index 0000000..bd9b622 --- /dev/null +++ b/assets/js/site.js @@ -0,0 +1,38 @@ +// New Chapter — progressive enhancements: mobile menu and footer year. +(function () { + var header = document.querySelector("[data-site-header]"); + var toggle = header && header.querySelector(".nav-toggle"); + var nav = header && header.querySelector("#site-nav"); + + if (toggle && nav) { + var setOpen = function (open) { + toggle.setAttribute("aria-expanded", String(open)); + header.classList.toggle("is-open", open); + }; + + toggle.addEventListener("click", function () { + setOpen(toggle.getAttribute("aria-expanded") !== "true"); + }); + + nav.addEventListener("click", function (event) { + if (event.target.closest("a")) setOpen(false); + }); + + document.addEventListener("keydown", function (event) { + if (event.key === "Escape" && header.classList.contains("is-open")) { + setOpen(false); + toggle.focus(); + } + }); + + var desktop = window.matchMedia("(min-width: 761px)"); + var onChange = function (event) { + if (event.matches) setOpen(false); + }; + if (desktop.addEventListener) desktop.addEventListener("change", onChange); + else if (desktop.addListener) desktop.addListener(onChange); + } + + var year = document.querySelector("[data-year]"); + if (year) year.textContent = String(new Date().getFullYear()); +})(); diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..af77264 Binary files /dev/null and b/favicon.ico differ diff --git a/favicon.svg b/favicon.svg new file mode 100644 index 0000000..3655b15 --- /dev/null +++ b/favicon.svg @@ -0,0 +1 @@ + diff --git a/index.html b/index.html new file mode 100644 index 0000000..2491970 --- /dev/null +++ b/index.html @@ -0,0 +1,263 @@ + + + + + + New Chapter — Products, AI, Training & Security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+

Technology company · Pinedale, Wyoming

+

Every company has a next chapter. We help you write it.

+

We build our own products — starting with LangX — and partner with teams on AI solutions, AI training, technology consulting and security.

+ +
+ + +
+
+ +
+
+

Chapter IProducts

+ +
+
+

LangX Live

+

“Practice, learn, succeed.”

+

Our first chapter: a language exchange app that pairs learners with native speakers for real conversations — with voice messages, smart partner filters and an AI Language Copilot. Free, and 100% open source.

+ +
+ + +
+ +
+
+

Forthcoming

+

In development

+

A new product is on the way — announcing soon.

+
+
+

Forthcoming

+

In planning

+

The next chapter is already being drafted.

+
+
+
+
+ +
+
+

Chapters II–IIIServices

+

What we can write together.

+ +
    +
  1. +
    01

    AI Solutions

    +

    Custom assistants, automations and models trained on your data — designed around your real workflows.

    +
  2. +
  3. +
    02

    AI Training

    +

    Workshops and programs that take whole teams from curious to confident, using tasks from your own work.

    +
  4. +
  5. +
    03

    Personalized AI Training

    +

    One-to-one learning paths built around a single person’s role, tools and goals — from founders to engineers.

    +
  6. +
  7. +
    04

    Technology Consulting

    +

    Architecture, roadmaps and build-vs-buy decisions from a team that ships its own products.

    +
  8. +
  9. +
    05

    Security

    +

    Audits, hardening and secure-by-design practices for apps, cloud infrastructure and AI systems.

    +
  10. +
  11. +
    06

    App & Web Development

    +

    iOS, Android and web products, from the first prototype to launch day and every release after.

    +
  12. +
+
+
+ +
+ +
+ +
+
+
+ +

Let’s write your next chapter.

+

Tell us where you are and where you want to go — a product idea, an AI rollout, a security review or a team that needs training.

+ info@newchapter.tech +
+ +
+
+
New business
+
info@newchapter.tech
+
+
+
Careers
+
jobs@newchapter.tech
+
+
+
Office
+
432 W Pine St, Pinedale, WY 82941, USA
+
+
+
+
+
+ + + + diff --git a/og-image.png b/og-image.png new file mode 100644 index 0000000..1669833 Binary files /dev/null and b/og-image.png differ diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..3fd7f84 --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://newchapter.tech/sitemap.xml diff --git a/site.webmanifest b/site.webmanifest new file mode 100644 index 0000000..823ce40 --- /dev/null +++ b/site.webmanifest @@ -0,0 +1,11 @@ +{ + "name": "New Chapter", + "short_name": "New Chapter", + "icons": [ + { "src": "/assets/brand/icon-192.png", "sizes": "192x192", "type": "image/png" }, + { "src": "/assets/brand/icon-512.png", "sizes": "512x512", "type": "image/png" } + ], + "theme_color": "#fafaf7", + "background_color": "#fafaf7", + "display": "browser" +} diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..a2b8684 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,6 @@ + + + + https://newchapter.tech/ + + diff --git a/src/nc_logo.png b/src/nc_logo.png deleted file mode 100644 index ee50477..0000000 Binary files a/src/nc_logo.png and /dev/null differ