From ccb4d0097dfbe582093ea6856c3c55f4c2519fa0 Mon Sep 17 00:00:00 2001 From: Ryan Westfall Date: Sun, 30 Aug 2026 06:55:43 -0700 Subject: [PATCH] piha.lc / beta.piha.li + company_site marketing landing (#4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Public short domain is **`piha.lc`** (prod) and **`beta.piha.li`** (beta) - `/` is a marketing page in [aimloperations.com](https://aimloperations.com) / `company_site` styling (Inter, dark, cyan) - CTA: want access → [contact](https://aimloperations.com/contact) - Nav/logo/footer match the company site; debug mint form uses the same chrome Closes #3. ## Secrets (control node) Update hostnames only — no new token/pepper unless you are rotating: **`url_shortening_service_prod.env`** ```text DJANGO_ALLOWED_HOSTS=piha.lc,shortener.aimloperations.com,url-shortener,web SHORT_DOMAIN=piha.lc PUBLIC_SHORT_URL=https://piha.lc SHORT_PUBLIC_HOSTS=piha.lc CONTACT_URL=https://aimloperations.com/contact ``` **`url_shortening_service_beta.env`** ```text DJANGO_ALLOWED_HOSTS=beta.piha.li,shortener-beta.aimloperations.com,url-shortener,web SHORT_DOMAIN=beta.piha.li PUBLIC_SHORT_URL=https://beta.piha.li SHORT_PUBLIC_HOSTS=beta.piha.li CONTACT_URL=https://aimloperations.com/contact ``` NPM: `piha.lc` / `beta.piha.li` → this container. Still do not proxy `/api/` on the short host. ## Test plan - [ ] `cd site && uv run python manage.py test` - [ ] `GET /` looks like aimloperations.com; Request access / Contact go to aimloperations.com/contact - [ ] `GET /` still 302 - [ ] `/api/` on Host `piha.lc` is 404 Reviewed-on: https://git.aimloperations.com/ai_ml_operations/url_shortening_service/pulls/4 --- .env.example | 3 +- .env.prod.example | 19 +- .gitea/workflows/ci.yml | 4 +- .gitea/workflows/deploy-beta.yml | 8 +- .gitea/workflows/deploy-prod.yml | 8 +- API.md | 6 +- Implementation.md | 12 +- README.md | 2 +- docker-compose.yml | 2 +- site/core/context_processors.py | 1 + site/core/static/core/css/overrides.css | 69 ++ site/core/static/core/css/style.css | 1091 ++++++++++++++++++ site/core/static/core/img/logo.png | Bin 0 -> 101541 bytes site/core/templates/core/base.html | 175 +-- site/core/templates/core/landing.html | 65 +- site/links/templates/links/debug_create.html | 64 +- site/links/tests.py | 51 +- site/shortener/settings/base.py | 7 +- 18 files changed, 1373 insertions(+), 214 deletions(-) create mode 100644 site/core/static/core/css/overrides.css create mode 100644 site/core/static/core/css/style.css create mode 100644 site/core/static/core/img/logo.png diff --git a/.env.example b/.env.example index 8cb9876..3ff7550 100644 --- a/.env.example +++ b/.env.example @@ -13,12 +13,13 @@ DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0,web,url-shortener SITE_NAME=URL Shortening Service CREDIT_NAME=AI ML Operations CREDIT_URL=https://aimloperations.com +CONTACT_URL=https://aimloperations.com/contact SHORT_DOMAIN=localhost:8005 # Origin printed in minted short_url (phones hit this). Local: this machine. PUBLIC_SHORT_URL=http://127.0.0.1:8005 # Host values that only serve GET / (no /api/). -SHORT_PUBLIC_HOSTS=go.mkdrealtor.com +SHORT_PUBLIC_HOSTS=piha.lc # Host values that serve /api/ (Bearer required). May include a public DNS name. SHORT_API_HOSTS=localhost,127.0.0.1,0.0.0.0,web,url-shortener # Django admin — keep local. Do not add the public API hostname. diff --git a/.env.prod.example b/.env.prod.example index a1c0980..151bed7 100644 --- a/.env.prod.example +++ b/.env.prod.example @@ -13,7 +13,7 @@ DJANGO_ENV=prod DJANGO_DEBUG=false DJANGO_SECRET_KEY=replace-with-a-long-random-secret # Public short host AND public API hostname (plus docker names if used). -DJANGO_ALLOWED_HOSTS=go.mkdrealtor.com,shortener.aimloperations.com,url-shortener,web +DJANGO_ALLOWED_HOSTS=piha.lc,shortener.aimloperations.com,url-shortener,web # Shared external Postgres DATABASE_URL=postgres://westfarn:replace-db-password@10.0.0.230:5432/url_shortener @@ -21,18 +21,19 @@ DATABASE_URL=postgres://westfarn:replace-db-password@10.0.0.230:5432/url_shorten # Host port (must match server-infra). NPM proxies SHORT_DOMAIN here. WEB_PORT=8005 -SHORT_DOMAIN=go.mkdrealtor.com -PUBLIC_SHORT_URL=https://go.mkdrealtor.com -SHORT_PUBLIC_HOSTS=go.mkdrealtor.com +SHORT_DOMAIN=piha.lc +PUBLIC_SHORT_URL=https://piha.lc +SHORT_PUBLIC_HOSTS=piha.lc SHORT_API_HOSTS=shortener.aimloperations.com,url-shortener,web SHORT_ADMIN_HOSTS=localhost,127.0.0.1 # Generate: python -c "import secrets; print(secrets.token_urlsafe(32))" # This token is the only thing that authorizes minting. Treat it as a secret. # monica_site sends: Authorization: Bearer monica: SHORTENER_API_TOKENS=monica:replace-with-token-urlsafe-32 -SHORT_ALLOWED_HOSTS=mkdrealtor.com +SHORT_ALLOWED_HOSTS=mkdrealtor.com,aimloperations.com SHORT_CODE_LENGTH=6 CLICK_IP_PEPPER=replace-with-a-distinct-pepper +CONTACT_URL=https://aimloperations.com/contact GUNICORN_WORKERS=2 GUNICORN_BIND=0.0.0.0:8000 @@ -44,11 +45,11 @@ GUNICORN_BIND=0.0.0.0:8000 # DJANGO_ENV=beta # DJANGO_DEBUG=false # DJANGO_SECRET_KEY=replace-with-a-different-beta-secret -# DJANGO_ALLOWED_HOSTS=go-beta.example.com,shortener-beta.aimloperations.com,url-shortener,web +# DJANGO_ALLOWED_HOSTS=beta.piha.li,shortener-beta.aimloperations.com,url-shortener,web # DATABASE_URL=postgres://westfarn:replace-db-password@10.0.0.230:5432/url_shortener_beta # WEB_PORT=8015 -# SHORT_DOMAIN=go-beta.example.com -# PUBLIC_SHORT_URL=https://go-beta.example.com -# SHORT_PUBLIC_HOSTS=go-beta.example.com +# SHORT_DOMAIN=beta.piha.li +# PUBLIC_SHORT_URL=https://beta.piha.li +# SHORT_PUBLIC_HOSTS=beta.piha.li # SHORTENER_API_TOKENS=monica:replace-with-a-different-token # CLICK_IP_PEPPER=replace-with-a-different-pepper diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 6dc17f0..360dc86 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -26,8 +26,8 @@ jobs: DATABASE_URL: "" DB_HOST: "" SHORTENER_API_TOKENS: monica:dev-only-token - PUBLIC_SHORT_URL: https://go.mkdrealtor.com - SHORT_PUBLIC_HOSTS: go.mkdrealtor.com + PUBLIC_SHORT_URL: https://piha.lc + SHORT_PUBLIC_HOSTS: piha.lc SHORT_API_HOSTS: testserver,localhost,127.0.0.1 SHORT_ALLOWED_HOSTS: mkdrealtor.com CLICK_IP_PEPPER: test-pepper diff --git a/.gitea/workflows/deploy-beta.yml b/.gitea/workflows/deploy-beta.yml index ae12964..cecdae9 100644 --- a/.gitea/workflows/deploy-beta.yml +++ b/.gitea/workflows/deploy-beta.yml @@ -26,8 +26,8 @@ jobs: DATABASE_URL: "" DB_HOST: "" SHORTENER_API_TOKENS: monica:dev-only-token - PUBLIC_SHORT_URL: https://go.mkdrealtor.com - SHORT_PUBLIC_HOSTS: go.mkdrealtor.com + PUBLIC_SHORT_URL: https://piha.lc + SHORT_PUBLIC_HOSTS: piha.lc SHORT_API_HOSTS: testserver,localhost,127.0.0.1 SHORT_ALLOWED_HOSTS: mkdrealtor.com CLICK_IP_PEPPER: test-pepper @@ -63,8 +63,8 @@ jobs: -e DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1,testserver \ -e DATABASE_URL=postgres://url_shortener:url_shortener@db:5432/url_shortener \ -e SHORTENER_API_TOKENS=monica:dev-only-token \ - -e PUBLIC_SHORT_URL=https://go.mkdrealtor.com \ - -e SHORT_PUBLIC_HOSTS=go.mkdrealtor.com \ + -e PUBLIC_SHORT_URL=https://piha.lc \ + -e SHORT_PUBLIC_HOSTS=piha.lc \ -e SHORT_API_HOSTS=testserver,localhost,127.0.0.1 \ -e SHORT_ALLOWED_HOSTS=mkdrealtor.com \ -e CLICK_IP_PEPPER=test-pepper \ diff --git a/.gitea/workflows/deploy-prod.yml b/.gitea/workflows/deploy-prod.yml index a2f8583..bbbe0d2 100644 --- a/.gitea/workflows/deploy-prod.yml +++ b/.gitea/workflows/deploy-prod.yml @@ -24,8 +24,8 @@ jobs: DATABASE_URL: "" DB_HOST: "" SHORTENER_API_TOKENS: monica:dev-only-token - PUBLIC_SHORT_URL: https://go.mkdrealtor.com - SHORT_PUBLIC_HOSTS: go.mkdrealtor.com + PUBLIC_SHORT_URL: https://piha.lc + SHORT_PUBLIC_HOSTS: piha.lc SHORT_API_HOSTS: testserver,localhost,127.0.0.1 SHORT_ALLOWED_HOSTS: mkdrealtor.com CLICK_IP_PEPPER: test-pepper @@ -61,8 +61,8 @@ jobs: -e DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1,testserver \ -e DATABASE_URL=postgres://url_shortener:url_shortener@db:5432/url_shortener \ -e SHORTENER_API_TOKENS=monica:dev-only-token \ - -e PUBLIC_SHORT_URL=https://go.mkdrealtor.com \ - -e SHORT_PUBLIC_HOSTS=go.mkdrealtor.com \ + -e PUBLIC_SHORT_URL=https://piha.lc \ + -e SHORT_PUBLIC_HOSTS=piha.lc \ -e SHORT_API_HOSTS=testserver,localhost,127.0.0.1 \ -e SHORT_ALLOWED_HOSTS=mkdrealtor.com \ -e CLICK_IP_PEPPER=test-pepper \ diff --git a/API.md b/API.md index eb34a5b..152aa14 100644 --- a/API.md +++ b/API.md @@ -3,13 +3,13 @@ For other services (`monica_site`, later callers) that mint short links. This service has two public hostnames. **Call the API host.** Never create links -on the short domain (`aiml.pw` / `cidinn.li` / `go.mkdrealtor.com`). That host +on the short domain (`piha.lc` / `beta.piha.li`). That host only serves `GET /` (landing) and `GET /` (302). `/api/` there is **404**. | Host | Example | What you call | |------|---------|----------------| | API | `https://shortener.aimloperations.com` | `POST/GET /api/links/` | -| Short | `https://aiml.pw` (or `cidinn.li`) | phones only — `GET /` | +| Short | `https://piha.lc` (beta: `https://beta.piha.li`) | phones only — `GET /` | Local compose: API + redirects on `http://127.0.0.1:8005`. @@ -147,7 +147,7 @@ Content-Type: application/json ```json { "code": "a3k9xm", - "short_url": "https://aiml.pw/a3k9xm", + "short_url": "https://piha.lc/a3k9xm", "target_url": "https://mkdrealtor.com/listings/oak-st?utm_source=monica&utm_medium=sms", "title": "Oak St listing", "is_active": true, diff --git a/Implementation.md b/Implementation.md index 72f8068..b2ee51c 100644 --- a/Implementation.md +++ b/Implementation.md @@ -2,7 +2,7 @@ Django 6 service in Docker, packaged with `uv`. First caller is `monica_site` (SMS campaign bodies and ad-hoc texts). A short public domain will be pointed at this service later; -until then a subdomain (for example `go.mkdrealtor.com`) is enough. +until then a subdomain is enough. Public short hosts: `piha.lc` (prod), `beta.piha.li` (beta). This document is the build spec. Implement in this repo. Do not fold the shortener into `monica_site`. @@ -69,7 +69,7 @@ cannot mint links without a configured Bearer token. Empty `SHORTENER_API_TOKENS ``` Internet │ - ├─ NPM: SHORT_DOMAIN (mkd.to / go.mkdrealtor.com) + ├─ NPM: SHORT_DOMAIN (piha.lc / beta.piha.li) │ location ~*^/[a-z0-9]{4,8}$ → gunicorn (redirects only) │ /api/* → 404 / drop │ /admin/ → 404 / drop @@ -130,7 +130,7 @@ Caller (`monica_site`) is an HTTP client. It does not share this database. Until the purchased short domain exists: -- Set `SHORT_DOMAIN=go.mkdrealtor.com` (or `localhost:8005` locally). +- Set `SHORT_DOMAIN=piha.lc` (or `localhost:8005` locally). - Codes do not change when DNS is swapped. Only `SHORT_DOMAIN` / `PUBLIC_SHORT_URL` change. --- @@ -274,7 +274,7 @@ Response `201`: ```json { "code": "a3k9xm", - "short_url": "https://go.mkdrealtor.com/a3k9xm", + "short_url": "https://piha.lc/a3k9xm", "target_url": "https://mkdrealtor.com/listings/oak-st?utm_source=monica&utm_medium=sms", "title": "Oak St listing", "is_active": true, @@ -355,8 +355,8 @@ Reject codes that do not match `^[a-z0-9]{4,8}$` with 404 (no extra work). | `DJANGO_DEBUG` | false in prod | | `DJANGO_ALLOWED_HOSTS` | public short host **and** API hostname | | `DATABASE_URL` | Postgres; empty → SQLite | -| `SHORT_DOMAIN` | public hostname phones use (`go.mkdrealtor.com` then `mkd.to`) | -| `PUBLIC_SHORT_URL` | origin for minted URLs, e.g. `https://go.mkdrealtor.com` (no trailing slash) | +| `SHORT_DOMAIN` | public hostname phones use (`piha.lc` prod, `beta.piha.li` beta) | +| `PUBLIC_SHORT_URL` | origin for minted URLs, e.g. `https://piha.lc` (no trailing slash) | | `SHORT_PUBLIC_HOSTS` | comma list; Host values that only serve redirects | | `SHORT_API_HOSTS` | comma list; Host values that serve `/api/` (public API DNS and/or docker name) | | `SHORT_ADMIN_HOSTS` | comma list; Host values that serve `/admin/` (default localhost only) | diff --git a/README.md b/README.md index 027e259..607d635 100644 --- a/README.md +++ b/README.md @@ -125,7 +125,7 @@ short URL, logs, or git. Two NPM hosts, same container `WEB_PORT` (default 8005 prod / 8015 beta): -1. `SHORT_DOMAIN` (`aiml.pw` / `cidinn.li`) — `/` landing + `GET /[a-z0-9]{4,8}`. +1. `SHORT_DOMAIN` (`piha.lc` prod / `beta.piha.li` beta) — `/` landing + `GET /[a-z0-9]{4,8}`. Drop `/api/`, `/admin/`, `/debug/`. 2. API hostname — proxy `/api/` only. Drop `/admin/`. Add that Host to `DJANGO_ALLOWED_HOSTS` and `SHORT_API_HOSTS`. diff --git a/docker-compose.yml b/docker-compose.yml index e567448..92d966e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,7 +28,7 @@ services: DATABASE_URL: ${COMPOSE_DATABASE_URL:-postgres://url_shortener:url_shortener@db:5432/url_shortener} SHORT_DOMAIN: ${SHORT_DOMAIN:-localhost:8005} PUBLIC_SHORT_URL: ${PUBLIC_SHORT_URL:-http://127.0.0.1:8005} - SHORT_PUBLIC_HOSTS: ${SHORT_PUBLIC_HOSTS:-go.mkdrealtor.com} + SHORT_PUBLIC_HOSTS: ${SHORT_PUBLIC_HOSTS:-piha.lc} SHORT_API_HOSTS: ${SHORT_API_HOSTS:-localhost,127.0.0.1,0.0.0.0,web,url-shortener} SHORTENER_API_TOKENS: ${SHORTENER_API_TOKENS:-monica:dev-only-token} SHORT_ALLOWED_HOSTS: ${SHORT_ALLOWED_HOSTS:-mkdrealtor.com,aimloperations.com} diff --git a/site/core/context_processors.py b/site/core/context_processors.py index f67f41f..0c1fa1c 100644 --- a/site/core/context_processors.py +++ b/site/core/context_processors.py @@ -10,5 +10,6 @@ def branding(request): "PUBLIC_SHORT_URL": settings.PUBLIC_SHORT_URL, "CREDIT_NAME": settings.CREDIT_NAME, "CREDIT_URL": settings.CREDIT_URL, + "CONTACT_URL": settings.CONTACT_URL, "show_debug_create": settings.DEBUG and not is_public_host(request.get_host()), } diff --git a/site/core/static/core/css/overrides.css b/site/core/static/core/css/overrides.css new file mode 100644 index 0000000..5b293c1 --- /dev/null +++ b/site/core/static/core/css/overrides.css @@ -0,0 +1,69 @@ +/* Shortener-only bits on top of company_site style.css */ + +.hero-cta { + margin-top: 1.75rem; +} + +.hero-subtitle--wide { + max-width: 40rem; +} + +.debug-banner { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 1100; + background: var(--secondary-color); + color: #fff; + text-align: center; + font-size: 0.75rem; + letter-spacing: 0.08em; + text-transform: uppercase; + padding: 0.4rem 1rem; +} + +.debug-banner a { + color: #fff; + text-decoration: underline; +} + +body.has-debug-banner nav { + top: 1.7rem; +} + +.page-main { + min-height: 60vh; +} + +.debug-section { + padding-top: 8rem; +} + +.debug-section .form-control { + margin-top: 0.35rem; +} + +.debug-section label { + display: block; + margin-bottom: 1rem; + color: var(--text-muted); + font-size: 0.85rem; + text-transform: uppercase; + letter-spacing: 0.04em; +} + +.debug-result { + margin-bottom: 1.5rem; +} + +.debug-result code { + color: var(--primary-color); + word-break: break-all; +} + +.brand-logo-img { + height: 28px; + width: auto; + display: block; +} diff --git a/site/core/static/core/css/style.css b/site/core/static/core/css/style.css new file mode 100644 index 0000000..8c4dd79 --- /dev/null +++ b/site/core/static/core/css/style.css @@ -0,0 +1,1091 @@ +:root { + --bg-color: #0a0a0a; + --surface-color: #1a1a1a; + --primary-color: #00f3ff; + /* Neon Cyan */ + --secondary-color: #bc13fe; + /* Neon Purple */ + --text-color: #e0e0e0; + --text-muted: #a0a0a0; + --font-main: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + --transition-speed: 0.3s; +} + +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + background-color: var(--bg-color); + color: var(--text-color); + font-family: var(--font-main); + line-height: 1.6; + overflow-x: hidden; + text-rendering: optimizeLegibility; +} + +a { + color: var(--primary-color); + text-decoration: none; + transition: color var(--transition-speed); +} + +a:hover { + color: var(--secondary-color); +} + +/* Navigation */ +nav { + background-color: rgba(10, 10, 10, 0.9); + backdrop-filter: blur(10px); + position: fixed; + top: 0; + width: 100%; + z-index: 1000; + padding: 1rem 2rem; + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); +} + +.brand-logo { + font-size: 1.5rem; + font-weight: 700; + color: white; + text-transform: uppercase; + letter-spacing: 1px; +} + +.nav-links { + display: flex; + gap: 2rem; + list-style: none; +} + +.nav-links a { + color: var(--text-color); + font-weight: 500; + font-size: 0.9rem; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.nav-links a:hover, +.nav-links a.active { + color: var(--primary-color); +} + +/* Hero Section */ +.hero-section { + position: relative; + height: 100vh; + min-height: 520px; + width: 100%; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; +} + +.hero-section--compact { + height: 40vh; + min-height: 300px; +} + +#hero-canvas { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 0; + pointer-events: none; +} + +.hero-content { + position: relative; + z-index: 1; + text-align: center; + padding: 0 1rem; + min-height: 12rem; +} + +.hero-title { + font-size: clamp(2.5rem, 8vw, 4rem); + font-weight: 800; + line-height: 1.1; + min-height: 1.1em; + background: linear-gradient(45deg, var(--primary-color), var(--secondary-color)); + -webkit-background-clip: text; + background-clip: text; + color: transparent; + margin-bottom: 1rem; + text-shadow: 0 0 20px rgba(0, 243, 255, 0.3); +} + +.hero-subtitle { + font-size: 1.5rem; + color: var(--text-muted); + max-width: 600px; + margin: 0 auto; +} + +/* Sections */ +.section { + padding: 5rem 2rem; +} + +.container { + max-width: 1200px; + margin: 0 auto; +} + +.section-title { + font-size: 2.5rem; + font-weight: 700; + margin-bottom: 3rem; + text-align: center; + color: white; +} + +.section-title::after { + content: ''; + display: block; + width: 60px; + height: 4px; + background: var(--primary-color); + margin: 1rem auto 0; + border-radius: 2px; +} + +/* Contact Page */ +.contact-grid { + display: grid; + grid-template-columns: 2fr 1fr; + gap: 4rem; +} + +.form-row { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1rem; +} + +/* Cards */ +.card-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 2rem; +} + +.card { + background: var(--surface-color); + border: 1px solid rgba(255, 255, 255, 0.05); + border-radius: 12px; + padding: 2rem; + transition: transform var(--transition-speed), box-shadow var(--transition-speed); +} + +.card:hover { + transform: translateY(-5px); + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3); + border-color: var(--primary-color); +} + +.card-title { + font-size: 1.25rem; + font-weight: 600; + margin-bottom: 1rem; + color: white; + display: block; +} + +.card-text { + color: var(--text-muted); + font-size: 0.95rem; +} + +/* Footer */ +.footer { + background: var(--surface-color); + padding: 3rem 2rem; + text-align: center; + border-top: 1px solid rgba(255, 255, 255, 0.05); +} + +.footer-text { + color: var(--text-muted); + font-size: 0.9rem; +} + +/* Mobile Nav */ +.mobile-menu-btn { + display: none; + background: none; + border: none; + color: white; + font-size: 1.5rem; + cursor: pointer; +} + +@media (max-width: 768px) { + .hero-title { + font-size: 2.5rem; + } + + .nav-links { + display: none; + flex-direction: column; + position: absolute; + top: 100%; + left: 0; + width: 100%; + background-color: rgba(10, 10, 10, 0.95); + backdrop-filter: blur(10px); + padding: 1rem; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + } + + .nav-links.active { + display: flex; + } + + .nav-links li { + margin: 1rem 0; + text-align: center; + } + + .mobile-menu-btn { + display: block; + } + + /* Mobile Dropdown adjustments */ + .dropdown-content { + position: static; + background: transparent; + box-shadow: none; + border: none; + min-width: auto; + padding-top: 0.5rem; + } + + .dropdown-content a { + padding: 8px; + font-size: 0.85rem; + color: var(--text-muted); + } + + .contact-grid { + grid-template-columns: 1fr; + gap: 2rem; + } + + .form-row { + grid-template-columns: 1fr; + } +} + +/* Forms */ +.form-group { + margin-bottom: 1.5rem; +} + +.form-label { + display: block; + margin-bottom: 0.5rem; + color: var(--text-color); + font-weight: 500; + font-size: 0.95rem; +} + +.contact-info-list { + list-style: none; +} + +.contact-info-item { + margin-bottom: 1rem; + display: flex; + align-items: center; + gap: 1rem; +} + +.contact-info-icon { + color: var(--primary-color); +} + +.visually-hidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +.form-control { + width: 100%; + padding: 1rem; + background: var(--bg-color); + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 8px; + color: white; + font-family: var(--font-main); + font-size: 1rem; + transition: border-color var(--transition-speed); +} + +.form-control:focus { + outline: none; + border-color: var(--primary-color); +} + +.btn { + display: inline-block; + padding: 1rem 2rem; + background: var(--primary-color); + color: black; + font-weight: 700; + border: none; + border-radius: 30px; + cursor: pointer; + text-transform: uppercase; + transition: transform var(--transition-speed), box-shadow var(--transition-speed); +} + +.btn:hover { + transform: translateY(-2px); + box-shadow: 0 5px 15px rgba(0, 243, 255, 0.3); +} + +.alert { + padding: 1rem; + border-radius: 8px; + margin-bottom: 1rem; +} + +.alert-success { + background: rgba(0, 255, 0, 0.1); + border: 1px solid rgba(0, 255, 0, 0.3); + color: #00ff00; +} + +.alert-danger { + background: rgba(255, 0, 0, 0.1); + border: 1px solid rgba(255, 0, 0, 0.3); + color: #ff0000; +} + +/* Dropdown */ +.dropdown { + position: relative; + display: inline-block; +} + +.dropdown-content { + display: none; + position: absolute; + background-color: var(--surface-color); + min-width: 200px; + box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2); + z-index: 1001; + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 8px; + top: 100%; + left: 0; + padding: 0.5rem 0; +} + +.dropdown-content li { + list-style: none; +} + +.dropdown-content a { + color: var(--text-color); + padding: 12px 16px; + text-decoration: none; + display: block; + transition: background-color var(--transition-speed); +} + +.dropdown-content a:hover { + background-color: rgba(255, 255, 255, 0.05); + color: var(--primary-color); +} + +.dropdown:hover .dropdown-content { + display: block; +} + +.dropdown.dropdown-open .dropdown-content { + display: block; +} + +.nav-dropdown-trigger { + background: none; + border: none; + cursor: pointer; + font: inherit; + color: var(--text-color); + font-weight: 500; + font-size: 0.9rem; + text-transform: uppercase; + letter-spacing: 0.5px; + padding: 0; +} + +.nav-dropdown-trigger:hover, +.nav-dropdown-trigger.active { + color: var(--primary-color); +} + +.dropdown .nav-dropdown-trigger::after { + content: ' ▼'; + font-size: 0.7em; + margin-left: 5px; +} + +/* Profile Dropdown */ +.profile-icon-link { + display: flex; + align-items: center; + padding: 0.25rem; + background: none; + border: none; + cursor: pointer; + font: inherit; +} + +.profile-icon-link::after { + display: none !important; +} + +/* Trusted-by marquee */ +.trusted-by-section { + padding: 2.5rem 0; + background: var(--bg-color); +} + +.trusted-by-label { + text-align: center; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.12em; + font-size: 0.8rem; + margin-bottom: 1.25rem; +} + +.trusted-by-marquee { + overflow: hidden; + min-height: 48px; +} + +.trusted-by-marquee-row { + display: flex; + width: max-content; +} + +.trusted-by-track { + display: flex; + align-items: center; + gap: 3rem; + padding-right: 3rem; + min-height: 48px; +} + +.trusted-by-logo img { + display: block; + height: 48px; + width: auto; + max-width: 320px; +} + +@media (prefers-reduced-motion: no-preference) { + .trusted-by-marquee-row { + animation: trusted-by-scroll 30s linear infinite; + } +} + +@keyframes trusted-by-scroll { + from { + transform: translateX(0); + } + + to { + transform: translateX(-50%); + } +} + +.profile-icon { + width: 28px; + height: 28px; + color: var(--text-color); + transition: color var(--transition-speed), filter var(--transition-speed); +} + +.profile-icon-link:hover .profile-icon { + color: var(--primary-color); + filter: drop-shadow(0 0 6px rgba(0, 243, 255, 0.5)); +} + +.profile-dropdown-content { + right: 0; + left: auto; + min-width: 180px; +} + +.profile-name-item { + padding: 12px 16px; + color: var(--primary-color); + font-weight: 600; + font-size: 0.9rem; + border-bottom: 1px solid rgba(255, 255, 255, 0.08); + text-transform: none; + letter-spacing: 0; + list-style: none; +} + +.profile-logout-btn { + width: 100%; + background: none; + border: none; + color: #ff4444; + padding: 12px 16px; + text-align: left; + font-family: var(--font-main); + font-size: 0.9rem; + font-weight: 600; + cursor: pointer; + text-transform: uppercase; + letter-spacing: 0.5px; + transition: background-color var(--transition-speed); +} + +.profile-logout-btn:hover { + background-color: rgba(255, 68, 68, 0.1); +} + +.text-cyber-cyan { + --tw-text-opacity: 1; + color: rgb(0 243 255 / var(--tw-text-opacity, 1)); +} + +/* Product Hero */ +.product-hero { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 4rem; + align-items: center; + min-height: 80vh; + padding: 8rem 2rem 4rem; + max-width: 1400px; + margin: 0 auto; +} + +.product-hero-content { + text-align: left; +} + +.product-hero-title { + font-size: 4rem; + font-weight: 800; + line-height: 1.1; + margin-bottom: 1.5rem; + background: linear-gradient(45deg, #fff, var(--text-muted)); + -webkit-background-clip: text; + background-clip: text; + color: transparent; +} + +.product-hero-subtitle { + font-size: 1.25rem; + color: var(--text-muted); + margin-bottom: 2.5rem; + line-height: 1.6; +} + +.hero-image-container { + position: relative; + perspective: 1000px; +} + +.hero-image { + width: 100%; + border-radius: 12px; + box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5); + border: 1px solid rgba(255, 255, 255, 0.1); + transform: rotateY(-5deg) rotateX(2deg); + transition: transform 0.5s ease; +} + +.hero-image:hover { + transform: rotateY(0) rotateX(0); +} + +@media (max-width: 968px) { + .product-hero { + grid-template-columns: 1fr; + text-align: center; + padding-top: 6rem; + gap: 3rem; + } + + .product-hero-content { + text-align: center; + } + + .product-hero-title { + font-size: 3rem; + } + + .hero-image { + transform: none; + } +} + +/* Table Styles */ +.table { + width: 100%; + margin-bottom: 1rem; + color: var(--text-color); + border-collapse: collapse; +} + +.table th, +.table td { + padding: 1rem; + vertical-align: top; + border-top: 1px solid rgba(255, 255, 255, 0.1); +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid rgba(255, 255, 255, 0.1); + color: var(--primary-color); + text-align: left; + font-weight: 600; +} + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +/* Django Form Styling defaults */ +input[type="text"], +input[type="number"], +input[type="email"], +input[type="password"], +input[type="date"], +input[type="time"], +input[type="datetime-local"], +select, +textarea { + width: 100%; + padding: 0.75rem 1rem; + background: var(--bg-color); + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 8px; + color: white; + font-family: var(--font-main); + font-size: 1rem; + margin-bottom: 1rem; + transition: border-color var(--transition-speed); +} + +input:focus, select:focus, textarea:focus { + outline: none; + border-color: var(--primary-color); +} + +.helptext { + color: var(--text-muted); + font-size: 0.85rem; + display: block; + margin-bottom: 1rem; + margin-top: -0.5rem; +} + +/* Footer links */ +.footer-links { + margin: 0.5rem 0; + font-size: 0.9rem; +} + +.footer-links a { + color: var(--text-muted); +} + +.footer-links a:hover { + color: var(--primary-color); +} + +.footer-link-btn { + background: none; + border: none; + padding: 0; + color: var(--text-muted); + font: inherit; + font-size: 0.9rem; + cursor: pointer; + text-decoration: none; +} + +.footer-link-btn:hover { + color: var(--primary-color); +} + +.footer-separator { + color: var(--text-muted); + margin: 0 0.5rem; +} + +/* Legal pages */ +.legal-page { + max-width: 820px; +} + +.legal-updated { + text-align: center; + color: var(--text-muted); + margin-bottom: 2rem; +} + +.legal-content h2 { + color: var(--primary-color); + font-size: 1.25rem; + margin: 2rem 0 0.75rem; +} + +.legal-content h3 { + color: var(--text-color); + font-size: 1.05rem; + margin: 1.5rem 0 0.5rem; +} + +.legal-content p, +.legal-content li { + color: var(--text-muted); + margin-bottom: 1rem; +} + +.legal-content ul { + margin: 0 0 1rem 1.5rem; +} + +.contact-captcha-group { + margin-top: 1rem; +} + +.contact-captcha-group + .btn { + margin-top: 1rem; +} + +/* Cookie consent banner */ +.cookie-consent-banner { + position: fixed; + bottom: 0; + left: 0; + right: 0; + z-index: 1100; + padding: 1rem; + background: rgba(26, 26, 26, 0.98); + border-top: 1px solid rgba(0, 243, 255, 0.25); + backdrop-filter: blur(10px); +} + +.cookie-consent-content { + max-width: 960px; + margin: 0 auto; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + gap: 1rem; +} + +.cookie-consent-text { + flex: 1 1 420px; + color: var(--text-muted); + font-size: 0.95rem; + margin: 0; +} + +.cookie-consent-text-short { + display: none; +} + +.cookie-consent-actions { + display: flex; + gap: 0.75rem; + flex-shrink: 0; +} + +.btn-outline { + background: transparent; + border: 1px solid rgba(255, 255, 255, 0.25); + color: var(--text-color); +} + +.btn-outline:hover { + border-color: var(--primary-color); + color: var(--primary-color); +} + +@media (max-width: 640px) { + .cookie-consent-banner { + padding: 0.625rem 0.75rem; + padding-bottom: max(0.625rem, env(safe-area-inset-bottom)); + } + + .cookie-consent-content { + flex-direction: column; + align-items: stretch; + gap: 0.625rem; + } + + .cookie-consent-text-short { + display: inline; + } + + .cookie-consent-text-full { + display: none; + } + + .cookie-consent-text { + flex: none; + font-size: 0.8125rem; + line-height: 1.35; + } + + .cookie-consent-actions { + width: 100%; + gap: 0.5rem; + } + + .cookie-consent-actions .btn { + flex: 1; + padding: 0.5rem 0.75rem; + font-size: 0.75rem; + border-radius: 6px; + text-transform: none; + } +} + +/* Web design interactive pricing estimator */ +.pricing-intro { + text-align: center; + max-width: 720px; + margin: 0 auto 2.5rem; + color: var(--text-muted); + font-size: 1.05rem; +} + +.pricing-estimator { + display: grid; + grid-template-columns: minmax(0, 1.6fr) minmax(260px, 0.9fr); + gap: 1.5rem; + align-items: start; +} + +.pricing-features-panel, +.pricing-estimate-panel { + background: var(--bg-color); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 12px; + padding: 1.5rem; +} + +.pricing-panel-title { + font-size: 1.35rem; + font-weight: 600; + color: #fff; + margin: 0 0 1.25rem; +} + +.pricing-feature-list { + list-style: none; + margin: 0; + padding: 0; +} + +.pricing-feature { + border-top: 1px solid rgba(255, 255, 255, 0.06); +} + +.pricing-feature:first-child { + border-top: none; +} + +.pricing-feature-label { + display: grid; + grid-template-columns: auto minmax(0, 1fr) auto; + gap: 0.85rem 1rem; + align-items: start; + padding: 1rem 0.25rem; + cursor: pointer; +} + +.pricing-feature.is-required .pricing-feature-label { + cursor: default; +} + +.pricing-feature-check { + appearance: none; + width: 1.15rem; + height: 1.15rem; + margin-top: 0.2rem; + border: 1.5px solid rgba(255, 255, 255, 0.35); + border-radius: 4px; + background: transparent; + display: grid; + place-content: center; + flex-shrink: 0; + cursor: pointer; +} + +.pricing-feature-check::before { + content: ""; + width: 0.65rem; + height: 0.65rem; + transform: scale(0); + transition: transform 0.12s ease-in-out; + box-shadow: inset 1em 1em var(--bg-color); + clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); +} + +.pricing-feature-check:checked { + background: var(--primary-color); + border-color: var(--primary-color); +} + +.pricing-feature-check:checked::before { + transform: scale(1); +} + +.pricing-feature-check:disabled { + background: rgba(255, 255, 255, 0.18); + border-color: rgba(255, 255, 255, 0.25); + cursor: not-allowed; +} + +.pricing-feature-check:disabled:checked::before { + box-shadow: inset 1em 1em rgba(10, 10, 10, 0.75); +} + +.pricing-feature-check:focus-visible { + outline: 2px solid var(--primary-color); + outline-offset: 2px; +} + +.pricing-feature.is-selected:not(.is-required) { + background: rgba(0, 243, 255, 0.04); +} + +.pricing-feature-name { + display: block; + color: #fff; + font-weight: 600; + margin-bottom: 0.2rem; +} + +.pricing-feature-desc { + display: block; + color: var(--text-muted); + font-size: 0.92rem; + line-height: 1.45; +} + +.pricing-feature-note { + display: block; + margin-top: 0.4rem; + color: #ffb347; + font-size: 0.85rem; +} + +.pricing-feature-costs { + text-align: right; + color: var(--text-muted); + font-size: 0.9rem; + white-space: nowrap; + line-height: 1.45; +} + +.pricing-feature-costs strong { + color: var(--primary-color); + font-weight: 700; +} + +.pricing-feature-monthly { + display: block; +} + +.pricing-estimate-panel { + position: sticky; + top: 5.5rem; +} + +.pricing-estimate-row { + display: flex; + justify-content: space-between; + align-items: baseline; + gap: 1rem; + margin-bottom: 0.85rem; + color: var(--text-muted); +} + +.pricing-estimate-row strong { + color: var(--primary-color); + font-size: 1.5rem; + font-weight: 700; +} + +.pricing-estimate-count { + margin: 1.25rem 0 0.75rem; + color: #fff; + font-size: 0.95rem; +} + +.pricing-estimate-disclaimer { + color: var(--text-muted); + font-size: 0.85rem; + line-height: 1.45; + margin-bottom: 1.5rem; +} + +.pricing-estimate-cta { + display: inline-block; + width: 100%; + text-align: center; +} + +@media (max-width: 900px) { + .pricing-estimator { + grid-template-columns: 1fr; + } + + .pricing-estimate-panel { + position: static; + } + + .pricing-feature-label { + grid-template-columns: auto minmax(0, 1fr); + } + + .pricing-feature-costs { + grid-column: 2; + text-align: left; + } + + .pricing-feature-monthly { + display: inline; + margin-left: 0.5rem; + } +} diff --git a/site/core/static/core/img/logo.png b/site/core/static/core/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..74fdc92ad6cdc1e7de3284396b796040026e7593 GIT binary patch literal 101541 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

M5d?(Ti(Dq4T8-bH*@NNs)07 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 iBoc{4B9Zv@;r{`DATk|hGF>|W0000 +{% load static %} - - - {% block title %}{{ SITE_NAME }}{% endblock %} - + + + {% block title %}{{ SITE_NAME }} · {{ CREDIT_NAME }}{% endblock %} + + + + + + + - + {% if debug %} -

+
Debug — mint form is local only{% if show_debug_create %} · Create a short link{% endif %}
{% endif %} -
+ + + +
{% block content %}{% endblock %} -
+ +
+
+ + + +
+
+ + diff --git a/site/core/templates/core/landing.html b/site/core/templates/core/landing.html index e83a09d..cbb943a 100644 --- a/site/core/templates/core/landing.html +++ b/site/core/templates/core/landing.html @@ -1,14 +1,57 @@ {% extends "core/base.html" %} -{% block title %}{{ SITE_NAME }}{% endblock %} +{% block title %}{{ SHORT_DOMAIN }} · URL shortener · {{ CREDIT_NAME }}{% endblock %} {% block content %} -

{{ SITE_NAME }}

-

{{ SHORT_DOMAIN }}

-

- This is a URL shortening service. A path like - /a3k9xm sends you to the long HTTPS URL. -

-

- Created by {{ CREDIT_NAME }} - · aimloperations.com -

+
+
+

{{ SHORT_DOMAIN }}

+

+ Short links for campaigns and trusted callers. Built by + {{ CREDIT_NAME }} — not an open public shortener. +

+ +
+
+ +
+
+

A shortener you can hand to SMS

+

+ {{ SHORT_DOMAIN }} turns a long HTTPS URL into a short path like + /a3k9xm. Recipients tap it and get a 302 to your site. + Creating links is Bearer-authenticated — only onboarded services can mint. +

+
+
+ +
+
+

Want access?

+
+
+

For your product

+

+ We issue a named token and allowlist your destination hosts. + Your app POSTs to the API and drops short_url into SMS or email. +

+
+
+

Not self-serve

+

+ There is no public signup. If you want this for a campaign or another + {{ CREDIT_NAME }} property, talk to us. +

+
+
+

Talk to us

+

+ Contact aimloperations.com and tell us + which hosts you need to shorten to. +

+ Contact +
+
+
+
{% endblock %} diff --git a/site/links/templates/links/debug_create.html b/site/links/templates/links/debug_create.html index be171ba..0e24a57 100644 --- a/site/links/templates/links/debug_create.html +++ b/site/links/templates/links/debug_create.html @@ -1,35 +1,43 @@ {% extends "core/base.html" %} {% block title %}Create short link · debug{% endblock %} {% block content %} -

Debug only

-

Create a short link

-

Uses the same allowlist as the API. Not served when DEBUG is false.

+
+
+

Create a short link

+

+ DEBUG only. Same allowlist as the API. Not served when DEBUG is false. +

- {% if messages %} -
    - {% for message in messages %}
  • {{ message }}
  • {% endfor %} -
- {% endif %} + {% if messages %} +
    + {% for message in messages %}
  • {{ message }}
  • {% endfor %} +
+ {% endif %} - {% if created_link %} -
-

Short URL

-

{{ created_link.public_short_url }}

-

Target: {{ created_link.target_url }}

- Open + {% if created_link %} +
+

Short URL

+

{{ created_link.public_short_url }}

+

Target: {{ created_link.target_url }}

+ Open +
+ {% endif %} + +
+ {% csrf_token %} + {{ form.non_field_errors }} + {% for field in form %} + + {% endfor %} + +
- {% endif %} - -
- {% csrf_token %} - {{ form.non_field_errors }} - {% for field in form %} - - {% endfor %} - -
+
{% endblock %} diff --git a/site/links/tests.py b/site/links/tests.py index fcf5d25..0c4dcf7 100644 --- a/site/links/tests.py +++ b/site/links/tests.py @@ -18,8 +18,9 @@ TOKENS = [("monica", "dev-only-token")] SETTINGS = dict( SHORTENER_API_TOKENS=TOKENS, - PUBLIC_SHORT_URL="https://go.mkdrealtor.com", - SHORT_PUBLIC_HOSTS=["go.mkdrealtor.com"], + SHORT_DOMAIN="piha.lc", + PUBLIC_SHORT_URL="https://piha.lc", + SHORT_PUBLIC_HOSTS=["piha.lc"], SHORT_API_HOSTS=["testserver", "localhost", "127.0.0.1", "shortener.example.com"], SHORT_ADMIN_HOSTS=["localhost", "127.0.0.1"], SHORT_ALLOWED_HOSTS=["mkdrealtor.com"], @@ -28,7 +29,7 @@ SETTINGS = dict( "testserver", "localhost", "127.0.0.1", - "go.mkdrealtor.com", + "piha.lc", "shortener.example.com", ], SHORT_CODE_LENGTH=6, @@ -93,7 +94,7 @@ class HostSplitTests(TestCase): data=json.dumps({"target_url": "https://mkdrealtor.com/x"}), content_type="application/json", HTTP_AUTHORIZATION=AUTH, - HTTP_HOST="go.mkdrealtor.com", + HTTP_HOST="piha.lc", ) self.assertEqual(response.status_code, 404) @@ -103,7 +104,7 @@ class HostSplitTests(TestCase): "localhost", "127.0.0.1", "shortener.example.com", - "go.mkdrealtor.com", + "piha.lc", ] ) def test_short_host_never_serves_api_even_if_also_listed_as_api(self): @@ -112,12 +113,12 @@ class HostSplitTests(TestCase): data=json.dumps({"target_url": "https://mkdrealtor.com/x"}), content_type="application/json", HTTP_AUTHORIZATION=AUTH, - HTTP_HOST="go.mkdrealtor.com", + HTTP_HOST="piha.lc", ) self.assertEqual(response.status_code, 404) def test_public_host_admin_404(self): - response = self.client.get("/admin/", HTTP_HOST="go.mkdrealtor.com") + response = self.client.get("/admin/", HTTP_HOST="piha.lc") self.assertEqual(response.status_code, 404) def test_public_api_host_without_bearer_401(self): @@ -155,7 +156,7 @@ class HostSplitTests(TestCase): self.assertEqual(response.status_code, 404) def test_healthz_on_public_and_api(self): - for host in ("go.mkdrealtor.com", "testserver", "shortener.example.com"): + for host in ("piha.lc", "testserver", "shortener.example.com"): response = self.client.get("/healthz/", HTTP_HOST=host) self.assertEqual(response.status_code, 200) self.assertEqual(_json(response), {"status": "ok"}) @@ -216,7 +217,7 @@ class RedirectTests(TestCase): def test_active_code_302_to_target(self): response = self.client.get( - "/a3k9xm", HTTP_HOST="go.mkdrealtor.com", follow=False + "/a3k9xm", HTTP_HOST="piha.lc", follow=False ) self.assertEqual(response.status_code, 302) self.assertNotEqual(response.status_code, 301) @@ -226,7 +227,7 @@ class RedirectTests(TestCase): def test_head_also_302_without_click(self): response = self.client.head( - "/a3k9xm", HTTP_HOST="go.mkdrealtor.com", follow=False + "/a3k9xm", HTTP_HOST="piha.lc", follow=False ) self.assertEqual(response.status_code, 302) self.assertEqual( @@ -239,34 +240,36 @@ class RedirectTests(TestCase): def test_inactive_404(self): self.link.is_active = False self.link.save() - response = self.client.get("/a3k9xm", HTTP_HOST="go.mkdrealtor.com") + response = self.client.get("/a3k9xm", HTTP_HOST="piha.lc") self.assertEqual(response.status_code, 404) def test_expired_404(self): self.link.expires_at = timezone.now() - timedelta(minutes=1) self.link.save() - response = self.client.get("/a3k9xm", HTTP_HOST="go.mkdrealtor.com") + response = self.client.get("/a3k9xm", HTTP_HOST="piha.lc") self.assertEqual(response.status_code, 404) def test_unknown_404(self): - response = self.client.get("/zzzzzz", HTTP_HOST="go.mkdrealtor.com") + response = self.client.get("/zzzzzz", HTTP_HOST="piha.lc") self.assertEqual(response.status_code, 404) def test_invalid_code_shape_404(self): - response = self.client.get("/AB", HTTP_HOST="go.mkdrealtor.com") + response = self.client.get("/AB", HTTP_HOST="piha.lc") self.assertEqual(response.status_code, 404) def test_public_root_is_landing(self): - response = self.client.get("/", HTTP_HOST="go.mkdrealtor.com") + response = self.client.get("/", HTTP_HOST="piha.lc") self.assertEqual(response.status_code, 200) - self.assertContains(response, "URL Shortening Service") + self.assertContains(response, "piha.lc") + self.assertContains(response, "Request access") self.assertContains(response, "aimloperations.com") + self.assertContains(response, "Contact") self.assertNotContains(response, "Create a short link") def test_click_row_and_count(self): self.client.get( "/a3k9xm", - HTTP_HOST="go.mkdrealtor.com", + HTTP_HOST="piha.lc", HTTP_USER_AGENT="sms-client", ) self.link.refresh_from_db() @@ -296,7 +299,7 @@ class CreateTests(TestCase): ) self.assertEqual(response.status_code, 201) body = _json(response) - self.assertTrue(body["short_url"].startswith("https://go.mkdrealtor.com/")) + self.assertTrue(body["short_url"].startswith("https://piha.lc/")) self.assertNotIn("testserver", body["short_url"]) def test_idempotent_same_target_and_external_ref(self): @@ -349,9 +352,9 @@ class CreateTests(TestCase): self.assertEqual(first.status_code, 200) self.assertEqual(second.status_code, 200) self.assertFalse(_json(second)["is_active"]) - self.client.get(f"/{code}", HTTP_HOST="go.mkdrealtor.com") + self.client.get(f"/{code}", HTTP_HOST="piha.lc") # disabled → no redirect - response = self.client.get(f"/{code}", HTTP_HOST="go.mkdrealtor.com") + response = self.client.get(f"/{code}", HTTP_HOST="piha.lc") self.assertEqual(response.status_code, 404) @@ -379,12 +382,12 @@ class UseCaseTests(TestCase): self.assertEqual(create.status_code, 201) body = _json(create) self.assertEqual( - body["short_url"], f"https://go.mkdrealtor.com/{body['code']}" + body["short_url"], f"https://piha.lc/{body['code']}" ) follow = self.client.get( f"/{body['code']}", - HTTP_HOST="go.mkdrealtor.com", + HTTP_HOST="piha.lc", follow=False, ) self.assertEqual(follow.status_code, 302) @@ -408,7 +411,7 @@ class DebugCreateTests(TestCase): @override_settings(DEBUG=True) def test_hidden_on_public_short_host_even_in_debug(self): - response = self.client.get("/debug/", HTTP_HOST="go.mkdrealtor.com") + response = self.client.get("/debug/", HTTP_HOST="piha.lc") self.assertEqual(response.status_code, 404) @override_settings(DEBUG=True) @@ -494,7 +497,7 @@ class AdminTests(TestCase): def test_admin_404_on_public_hosts(self): self.client.logout() - response = self.client.get("/admin/", HTTP_HOST="go.mkdrealtor.com") + response = self.client.get("/admin/", HTTP_HOST="piha.lc") self.assertEqual(response.status_code, 404) response = self.client.get("/admin/", HTTP_HOST="shortener.example.com") self.assertEqual(response.status_code, 404) diff --git a/site/shortener/settings/base.py b/site/shortener/settings/base.py index 793c34a..7d7be7c 100644 --- a/site/shortener/settings/base.py +++ b/site/shortener/settings/base.py @@ -89,7 +89,7 @@ DEBUG = env_bool("DJANGO_DEBUG", False) allowed_hosts = env_list( "DJANGO_ALLOWED_HOSTS", - "localhost,127.0.0.1,0.0.0.0,testserver,web,url-shortener,go.mkdrealtor.com", + "localhost,127.0.0.1,0.0.0.0,testserver,web,url-shortener,piha.lc,beta.piha.li", ) ALLOWED_HOSTS = allowed_hosts if allowed_hosts else ["*"] @@ -176,7 +176,7 @@ DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" # --- Shortener --- SHORT_DOMAIN = env("SHORT_DOMAIN", "localhost:8000") or "localhost:8000" -PUBLIC_SHORT_URL = (env("PUBLIC_SHORT_URL", "https://go.mkdrealtor.com") or "").rstrip( +PUBLIC_SHORT_URL = (env("PUBLIC_SHORT_URL", "https://piha.lc") or "").rstrip( "/" ) SHORT_PUBLIC_HOSTS = env_list("SHORT_PUBLIC_HOSTS", SHORT_DOMAIN.split(":")[0]) @@ -196,3 +196,6 @@ CODE_ALPHABET = "23456789abcdefghjkmnpqrstuvwxyz" SITE_NAME = env("SITE_NAME", "URL Shortening Service") or "URL Shortening Service" CREDIT_NAME = env("CREDIT_NAME", "AI ML Operations") or "AI ML Operations" CREDIT_URL = env("CREDIT_URL", "https://aimloperations.com") or "https://aimloperations.com" +CONTACT_URL = env("CONTACT_URL", "https://aimloperations.com/contact") or ( + "https://aimloperations.com/contact" +)