5 Commits

Author SHA1 Message Date
soroush.asadi 7a7542d77b Translate blog articles to Persian (locale-aware bodies)
deploy / deploy (push) Successful in 25s
The 6 blog post bodies were English-only even in Persian mode. Add natural
Persian translations and select the body by locale (IsFa ? BodyFa : BodyEn),
so a Persian reader gets a fully Persian article. Also removed the em/en
dashes from the English bodies (taste compliance) and stripped stray bidi
control chars (kept ZWNJ).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 12:12:36 +03:30
soroush.asadi 8896740895 Harden UX & accessibility (ui-ux-pro-max pass)
deploy / deploy (push) Successful in 24s
Audited the site with the ui-ux-pro-max skill. It validated the brand blue
(#2563EB == its SaaS primary) but flagged real high-severity gaps:

- Contrast: muted grays were zinc-400 (~2.8:1, fails WCAG AA). Bumped the
  muted token + all text-zinc-400 to zinc-500 (#71717a, ~4.6:1).
- Touch targets: social buttons 38px -> 44x44 (meets 44pt minimum).
- Cursor + disabled: cursor-pointer on buttons; disabled state dims + blocks.
- Form a11y: required-field asterisks (name/service/budget/message),
  autocomplete on name/company, and role=status aria-live=polite on the
  submit status so screen readers announce success/error.

Kept Syne + system fonts and the blue accent (skill suggested Inter + an
AI-purple palette its own anti-patterns reject). Rebuilt Tailwind bundles.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 05:33:44 +03:30
soroush.asadi 255e8d25e5 Humanize all Persian copy across the site
deploy / deploy (push) Successful in 24s
Rewrite the FA strings sitewide in natural, human Persian (English unchanged),
removing translation calques like «معمار راهکار», «هوش مصنوعی تولیدی»,
«موارد کاربری», «چرخه‌های هیجان», «استقرار در تولید», «محیط تولید».

Covers: hero, services, pipeline, stack, expertise, portfolio, blog, contact
(Index), nav/meta/footer (_Layout), the /blog list + per-post FA titles
(BlogIndexModel, PostModel). Also removed two stray English em-dashes in the
blog excerpts.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 03:50:21 +03:30
soroush.asadi 97bd2a12df Redesign public site: minimal light editorial theme
deploy / deploy (push) Successful in 1m20s
Full design refactor of the public surface (home, blog, layout) using the
taste-skill anti-slop rules. Admin CMS is untouched.

- Single locked light theme: #fafafa bg, #18181b text, one accent #2563eb
- Syne headings + system body + Vazirmatn (fa); hairline rules, no glows/cards
- Remove AI tells: 5-colour palette, gradient text, neon glows, custom cursor,
  particle canvas, typewriter, scroll cue, per-section eyebrows, progress bars
- Replace window scroll listener with an IntersectionObserver sentinel
- 8 distinct section layouts; portfolio uses typographic covers (no broken imgs)
- Zero em-dashes in visible copy; fix relative-path-safe asset refs
- Add missing wwwroot/logo-mark.svg (was 404)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 05:16:06 +03:30
soroush.asadi 1b3a8b493e Rewrite: Next.js → ASP.NET Core 10 Razor Pages
deploy / deploy (push) Failing after 1m21s
Full rewrite of the portfolio site from Next.js 14 to .NET 10:

- ASP.NET Core 10 Razor Pages, no Node.js dependency
- EF Core 10 + SQLite (same schema as before — data survives upgrade)
- Cookie authentication (same single-password model)
- Resend contact form via HttpClient
- Bilingual FA/EN via locale cookie + BasePageModel
- All UI ported to Razor Pages with Tailwind CDN + custom CSS
- Vanilla JS: particles, typewriter, cursor, animations, portfolio modal
- Dockerfile: SDK 10.0-alpine → aspnet 10.0-alpine (no npm/Node needed)
- CI/CD: dropped NPM_TOKEN, ADMIN_SESSION_SECRET — pure dotnet publish

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 07:46:56 +03:30