diff --git a/.github/workflows/ci-expo.yml b/.github/workflows/ci-expo.yml index 3214d4a..6af6130 100644 --- a/.github/workflows/ci-expo.yml +++ b/.github/workflows/ci-expo.yml @@ -5,16 +5,44 @@ on: branches: [main] paths: - 'libraries/expo-ondevice-ai/**' + - '!libraries/expo-ondevice-ai/**/*.md' + - '!libraries/expo-ondevice-ai/**/*.mdx' + - '!libraries/expo-ondevice-ai/example/app/(tabs)/settings.tsx' - '.github/workflows/ci-expo.yml' pull_request: branches: [main] paths: - 'libraries/expo-ondevice-ai/**' + - '!libraries/expo-ondevice-ai/**/*.md' + - '!libraries/expo-ondevice-ai/**/*.mdx' + - '!libraries/expo-ondevice-ai/example/app/(tabs)/settings.tsx' - '.github/workflows/ci-expo.yml' jobs: + changes: + name: Detect Changes + runs-on: ubuntu-latest + outputs: + library: ${{ steps.filter.outputs.library }} + steps: + - uses: actions/checkout@v4 + + - name: Filter changed files + id: filter + uses: dorny/paths-filter@v3 + with: + filters: | + library: + - '.github/workflows/ci-expo.yml' + - 'libraries/expo-ondevice-ai/**' + - '!libraries/expo-ondevice-ai/**/*.md' + - '!libraries/expo-ondevice-ai/**/*.mdx' + - '!libraries/expo-ondevice-ai/example/app/(tabs)/settings.tsx' + lint-and-test: name: Lint & Test + needs: changes + if: needs.changes.outputs.library == 'true' runs-on: ubuntu-latest defaults: run: @@ -57,6 +85,8 @@ jobs: build-android: name: Build Android + needs: changes + if: needs.changes.outputs.library == 'true' runs-on: ubuntu-latest steps: @@ -100,6 +130,8 @@ jobs: build-ios: name: Build iOS + needs: changes + if: needs.changes.outputs.library == 'true' runs-on: macos-latest steps: @@ -156,6 +188,8 @@ jobs: build-web: name: Build Web + needs: changes + if: needs.changes.outputs.library == 'true' runs-on: ubuntu-latest steps: diff --git a/.github/workflows/ci-flutter.yml b/.github/workflows/ci-flutter.yml index 075842d..b3d6677 100644 --- a/.github/workflows/ci-flutter.yml +++ b/.github/workflows/ci-flutter.yml @@ -5,16 +5,44 @@ on: branches: [main] paths: - 'libraries/flutter_ondevice_ai/**' + - '!libraries/flutter_ondevice_ai/**/*.md' + - '!libraries/flutter_ondevice_ai/**/*.mdx' + - '!libraries/flutter_ondevice_ai/example/lib/screens/settings_screen.dart' - '.github/workflows/ci-flutter.yml' pull_request: branches: [main] paths: - 'libraries/flutter_ondevice_ai/**' + - '!libraries/flutter_ondevice_ai/**/*.md' + - '!libraries/flutter_ondevice_ai/**/*.mdx' + - '!libraries/flutter_ondevice_ai/example/lib/screens/settings_screen.dart' - '.github/workflows/ci-flutter.yml' jobs: + changes: + name: Detect Changes + runs-on: ubuntu-latest + outputs: + library: ${{ steps.filter.outputs.library }} + steps: + - uses: actions/checkout@v4 + + - name: Filter changed files + id: filter + uses: dorny/paths-filter@v3 + with: + filters: | + library: + - '.github/workflows/ci-flutter.yml' + - 'libraries/flutter_ondevice_ai/**' + - '!libraries/flutter_ondevice_ai/**/*.md' + - '!libraries/flutter_ondevice_ai/**/*.mdx' + - '!libraries/flutter_ondevice_ai/example/lib/screens/settings_screen.dart' + analyze-and-test: name: Analyze & Test + needs: changes + if: needs.changes.outputs.library == 'true' runs-on: ubuntu-latest steps: diff --git a/.github/workflows/ci-react-native.yml b/.github/workflows/ci-react-native.yml index d9ec9b4..ce55cbf 100644 --- a/.github/workflows/ci-react-native.yml +++ b/.github/workflows/ci-react-native.yml @@ -5,16 +5,44 @@ on: branches: [main] paths: - 'libraries/react-native-ondevice-ai/**' + - '!libraries/react-native-ondevice-ai/**/*.md' + - '!libraries/react-native-ondevice-ai/**/*.mdx' + - '!libraries/react-native-ondevice-ai/example/src/screens/SettingsScreen.tsx' - '.github/workflows/ci-react-native.yml' pull_request: branches: [main] paths: - 'libraries/react-native-ondevice-ai/**' + - '!libraries/react-native-ondevice-ai/**/*.md' + - '!libraries/react-native-ondevice-ai/**/*.mdx' + - '!libraries/react-native-ondevice-ai/example/src/screens/SettingsScreen.tsx' - '.github/workflows/ci-react-native.yml' jobs: + changes: + name: Detect Changes + runs-on: ubuntu-latest + outputs: + library: ${{ steps.filter.outputs.library }} + steps: + - uses: actions/checkout@v4 + + - name: Filter changed files + id: filter + uses: dorny/paths-filter@v3 + with: + filters: | + library: + - '.github/workflows/ci-react-native.yml' + - 'libraries/react-native-ondevice-ai/**' + - '!libraries/react-native-ondevice-ai/**/*.md' + - '!libraries/react-native-ondevice-ai/**/*.mdx' + - '!libraries/react-native-ondevice-ai/example/src/screens/SettingsScreen.tsx' + lint-and-test: name: Lint & Test + needs: changes + if: needs.changes.outputs.library == 'true' runs-on: ubuntu-latest defaults: run: @@ -64,6 +92,8 @@ jobs: build-android: name: Build Android + needs: changes + if: needs.changes.outputs.library == 'true' runs-on: ubuntu-latest steps: @@ -99,6 +129,8 @@ jobs: build-ios: name: Build iOS + needs: changes + if: needs.changes.outputs.library == 'true' runs-on: macos-latest steps: @@ -153,4 +185,3 @@ jobs: -configuration Debug \ build \ CODE_SIGNING_ALLOWED=NO - diff --git a/README.md b/README.md index 9115ccd..f73975d 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Locanara is an on-device AI framework inspired by LangChain, purpose-built for m No cloud. No data leaves. Privacy by design. -**Documentation**: [locanara.com](https://locanara.com) | **Blog**: [LangChain for Mobile, Entirely On-Device — Meet Locanara](https://medium.com/dooboolab/langchain-for-mobile-entirely-on-device-meet-locanara-33112ade3b0e) +**Documentation**: [locanara.hyo.dev](https://locanara.hyo.dev) | **Blog**: [LangChain for Mobile, Entirely On-Device — Meet Locanara](https://medium.com/dooboolab/langchain-for-mobile-entirely-on-device-meet-locanara-33112ade3b0e) --- @@ -282,7 +282,7 @@ suspend fun pipelineExample(context: Context) { | Rewrite | `Rewrite(style:)` | `.rewrite(style:)` | `RewriteResult` | | Extract | `Extract(entityTypes:)` | `.extract(entityTypes:)` | `ExtractResult` | -> **Full tutorial**: [locanara.com/docs/tutorials/pipeline](https://locanara.com/docs/tutorials/pipeline) +> **Full tutorial**: [locanara.hyo.dev/docs/tutorials/pipeline](https://locanara.hyo.dev/docs/tutorials/pipeline) --- @@ -297,7 +297,7 @@ suspend fun pipelineExample(context: Context) { [![Maven Central](https://img.shields.io/maven-central/v/com.locanara/locanara?label=Maven%20Central)](https://central.sonatype.com/artifact/com.locanara/locanara) [![CI Android](https://github.com/hyodotdev/locanara/actions/workflows/ci-android.yml/badge.svg)](https://github.com/hyodotdev/locanara/actions/workflows/ci-android.yml) -- [**site**](packages/site) — Website + Documentation → [locanara.com](https://locanara.com) +- [**site**](packages/site) — Website + Documentation → [locanara.hyo.dev](https://locanara.hyo.dev) ## Libraries diff --git a/libraries/expo-ondevice-ai/README.md b/libraries/expo-ondevice-ai/README.md index 09a69ef..247e8e2 100644 --- a/libraries/expo-ondevice-ai/README.md +++ b/libraries/expo-ondevice-ai/README.md @@ -101,7 +101,7 @@ const translated = await translate('Hello', { ## Documentation -Full API documentation and guides are available at **[locanara.com/docs/libraries/expo](https://locanara.com/docs/libraries/expo)**. +Full API documentation and guides are available at **[locanara.hyo.dev/docs/libraries/expo](https://locanara.hyo.dev/docs/libraries/expo)**. ## License diff --git a/libraries/expo-ondevice-ai/example/app/(tabs)/settings.tsx b/libraries/expo-ondevice-ai/example/app/(tabs)/settings.tsx index 5d27ccb..6baa84b 100644 --- a/libraries/expo-ondevice-ai/example/app/(tabs)/settings.tsx +++ b/libraries/expo-ondevice-ai/example/app/(tabs)/settings.tsx @@ -67,7 +67,7 @@ export default function SettingsScreen() { }; const handleOpenDocs = () => { - Linking.openURL('https://locanara.com/docs'); + Linking.openURL('https://locanara.hyo.dev/docs'); }; const handleOpenGitHub = () => { diff --git a/libraries/flutter_ondevice_ai/README.md b/libraries/flutter_ondevice_ai/README.md index 5077417..8763e47 100644 --- a/libraries/flutter_ondevice_ai/README.md +++ b/libraries/flutter_ondevice_ai/README.md @@ -1,6 +1,6 @@ # flutter_ondevice_ai -Flutter plugin for on-device AI using [Locanara SDK](https://locanara.com). +Flutter plugin for on-device AI using [Locanara SDK](https://locanara.hyo.dev). Supports iOS (Apple Intelligence / llama.cpp), Android (Gemini Nano), and Web (Chrome Built-in AI) from a single Dart API. @@ -27,7 +27,7 @@ if (capability.isSupported) { ## Documentation -Full documentation at [locanara.com/docs/libraries/flutter](https://locanara.com/docs/libraries/flutter) +Full documentation at [locanara.hyo.dev/docs/libraries/flutter](https://locanara.hyo.dev/docs/libraries/flutter) ## License diff --git a/libraries/flutter_ondevice_ai/example/lib/screens/settings_screen.dart b/libraries/flutter_ondevice_ai/example/lib/screens/settings_screen.dart index 88198af..fcd46cf 100644 --- a/libraries/flutter_ondevice_ai/example/lib/screens/settings_screen.dart +++ b/libraries/flutter_ondevice_ai/example/lib/screens/settings_screen.dart @@ -77,7 +77,7 @@ class SettingsScreen extends StatelessWidget { icon: Icons.menu_book, label: 'Documentation', trailing: Icons.open_in_new, - onTap: () => _launchUrl('https://locanara.com/docs'), + onTap: () => _launchUrl('https://locanara.hyo.dev/docs'), ), const _Separator(), _ActionRow( diff --git a/libraries/react-native-ondevice-ai/example/src/screens/SettingsScreen.tsx b/libraries/react-native-ondevice-ai/example/src/screens/SettingsScreen.tsx index 60900c5..7839950 100644 --- a/libraries/react-native-ondevice-ai/example/src/screens/SettingsScreen.tsx +++ b/libraries/react-native-ondevice-ai/example/src/screens/SettingsScreen.tsx @@ -67,7 +67,7 @@ export default function SettingsScreen() { }; const handleOpenDocs = () => { - Linking.openURL('https://locanara.com/docs'); + Linking.openURL('https://locanara.hyo.dev/docs'); }; const handleOpenGitHub = () => { diff --git a/llms-full.txt b/llms-full.txt index 5cd1773..5bc12f5 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -1,8 +1,8 @@ # Locanara Community SDK Complete Reference > Locanara: Unified on-device AI SDK for iOS/macOS and Android -> Documentation: https://locanara.com -> Quick Reference: https://locanara.com/llms.txt +> Documentation: https://locanara.hyo.dev +> Quick Reference: https://locanara.hyo.dev/llms.txt > Generated: 2026-02-16T13:55:08.262Z ## Table of Contents @@ -1917,7 +1917,7 @@ try await llmSession?.prewarm() ## Links & Resources -- Documentation: https://locanara.com +- Documentation: https://locanara.hyo.dev - GitHub: https://github.com/hyodotdev/locanara -- Types Reference: https://locanara.com/docs/types -- APIs Reference: https://locanara.com/docs/apis +- Types Reference: https://locanara.hyo.dev/docs/types +- APIs Reference: https://locanara.hyo.dev/docs/apis diff --git a/llms.txt b/llms.txt index cb7cd0f..dc7419d 100644 --- a/llms.txt +++ b/llms.txt @@ -1,8 +1,8 @@ # Locanara Community SDK Quick Reference > Locanara: On-device AI SDK for iOS/macOS and Android -> Documentation: https://locanara.com -> Full Reference: https://locanara.com/llms-full.txt +> Documentation: https://locanara.hyo.dev +> Full Reference: https://locanara.hyo.dev/llms-full.txt > Generated: 2026-02-16T13:55:08.262Z ## Overview @@ -105,5 +105,5 @@ enum LocanaraError: Error { ## Links -- Docs: https://locanara.com +- Docs: https://locanara.hyo.dev - GitHub: https://github.com/hyodotdev/locanara diff --git a/packages/android/locanara/build.gradle.kts b/packages/android/locanara/build.gradle.kts index c786d8d..33534f6 100644 --- a/packages/android/locanara/build.gradle.kts +++ b/packages/android/locanara/build.gradle.kts @@ -132,7 +132,7 @@ mavenPublishing { pom { name.set("Locanara Android SDK") description.set("On-device AI SDK for Android using Gemini Nano") - url.set("https://locanara.com") + url.set("https://locanara.hyo.dev") licenses { license { diff --git a/packages/site/index.html b/packages/site/index.html index 12716a7..f617e3e 100644 --- a/packages/site/index.html +++ b/packages/site/index.html @@ -37,7 +37,7 @@ - + - + @@ -55,7 +55,7 @@ - + - + diff --git a/packages/site/public/llms-full.txt b/packages/site/public/llms-full.txt index 33476ea..f0fba55 100644 --- a/packages/site/public/llms-full.txt +++ b/packages/site/public/llms-full.txt @@ -9,9 +9,9 @@ Locanara is a privacy-first, on-device AI SDK that enables mobile developers to ## Project Information - **Name**: Locanara -- **Website**: https://locanara.com -- **Documentation**: https://locanara.com/docs -- **Community Forum**: https://locanara.com/community +- **Website**: https://locanara.hyo.dev +- **Documentation**: https://locanara.hyo.dev/docs +- **Community Forum**: https://locanara.hyo.dev/community - **GitHub Repository**: https://github.com/hyodotdev/locanara - **License**: AGPL-3.0 (free and open-source) @@ -431,16 +431,16 @@ A: On iOS, Locanara supports both Apple Intelligence (Foundation Models) and dow ## Support & Community -- **Documentation**: https://locanara.com/docs -- **Community Forum**: https://locanara.com/community +- **Documentation**: https://locanara.hyo.dev/docs +- **Community Forum**: https://locanara.hyo.dev/community - **GitHub Issues**: https://github.com/hyodotdev/locanara/issues - **Email**: support@locanara.com ## Legal - License: AGPL-3.0 (https://github.com/hyodotdev/locanara/blob/main/LICENSE) -- Privacy Policy: https://locanara.com/privacy-policy -- Terms of Service: https://locanara.com/terms-of-service +- Privacy Policy: https://locanara.hyo.dev/privacy-policy +- Terms of Service: https://locanara.hyo.dev/terms-of-service --- diff --git a/packages/site/public/llms.txt b/packages/site/public/llms.txt index 9696336..af13490 100644 --- a/packages/site/public/llms.txt +++ b/packages/site/public/llms.txt @@ -18,7 +18,7 @@ Free and open-source. No API keys, no usage limits, no per-request fees. ## Links -- Docs: https://locanara.com/docs -- Full info: https://locanara.com/llms-full.txt -- Community: https://locanara.com/community +- Docs: https://locanara.hyo.dev/docs +- Full info: https://locanara.hyo.dev/llms-full.txt +- Community: https://locanara.hyo.dev/community - GitHub: https://github.com/hyodotdev/locanara diff --git a/packages/site/public/robots.txt b/packages/site/public/robots.txt index dc51da9..3a24684 100644 --- a/packages/site/public/robots.txt +++ b/packages/site/public/robots.txt @@ -23,7 +23,7 @@ Allow: / User-agent: Applebot-Extended Allow: / -Sitemap: https://locanara.com/sitemap.xml +Sitemap: https://locanara.hyo.dev/sitemap.xml # AI/LLM information -# See https://locanara.com/llms.txt for structured information about this site +# See https://locanara.hyo.dev/llms.txt for structured information about this site diff --git a/packages/site/public/sitemap.xml b/packages/site/public/sitemap.xml index 59697fb..94c2329 100644 --- a/packages/site/public/sitemap.xml +++ b/packages/site/public/sitemap.xml @@ -1,13 +1,13 @@ - https://locanara.com/ + https://locanara.hyo.dev/ weekly 1.0 - https://locanara.com/community + https://locanara.hyo.dev/community daily 0.8 diff --git a/packages/site/src/components/SEO.tsx b/packages/site/src/components/SEO.tsx index c61a2e4..02c0b92 100644 --- a/packages/site/src/components/SEO.tsx +++ b/packages/site/src/components/SEO.tsx @@ -19,7 +19,7 @@ const DEFAULT_TITLE = "Locanara - Free Open-Source On-Device AI SDK for iOS and Android"; const DEFAULT_DESCRIPTION = "Privacy-first, unified on-device AI SDK for mobile developers. Build AI-powered apps without compromising user privacy."; -const SITE_URL = "https://locanara.com"; +const SITE_URL = "https://locanara.hyo.dev"; const DEFAULT_IMAGE = `${SITE_URL}/og-image.png`; const organizationSchema = { diff --git a/packages/site/src/pages/PrivacyPolicy.tsx b/packages/site/src/pages/PrivacyPolicy.tsx index c0e941e..b03458e 100644 --- a/packages/site/src/pages/PrivacyPolicy.tsx +++ b/packages/site/src/pages/PrivacyPolicy.tsx @@ -218,10 +218,10 @@ export function PrivacyPolicy() {
Website:{" "} - https://locanara.com + https://locanara.hyo.dev

diff --git a/packages/site/src/pages/TermsOfService.tsx b/packages/site/src/pages/TermsOfService.tsx index 09d94dc..7a33110 100644 --- a/packages/site/src/pages/TermsOfService.tsx +++ b/packages/site/src/pages/TermsOfService.tsx @@ -188,10 +188,10 @@ export function TermsOfService() {
Website:{" "} - https://locanara.com + https://locanara.hyo.dev

diff --git a/packages/site/src/seo.test.ts b/packages/site/src/seo.test.ts index b43497b..3edfb27 100644 --- a/packages/site/src/seo.test.ts +++ b/packages/site/src/seo.test.ts @@ -18,11 +18,13 @@ describe("SEO", () => { }); it("should contain homepage URL", () => { - expect(sitemap).toContain("https://locanara.com/"); + expect(sitemap).toContain("https://locanara.hyo.dev/"); }); it("should contain community page URL", () => { - expect(sitemap).toContain("https://locanara.com/community"); + expect(sitemap).toContain( + "https://locanara.hyo.dev/community" + ); }); it("should have valid changefreq values", () => { @@ -71,7 +73,7 @@ describe("SEO", () => { }); it("should reference sitemap", () => { - expect(robots).toContain("Sitemap: https://locanara.com/sitemap.xml"); + expect(robots).toContain("Sitemap: https://locanara.hyo.dev/sitemap.xml"); }); }); @@ -108,7 +110,7 @@ describe("SEO", () => { it("should have og:url", () => { expect(html).toContain('property="og:url"'); - expect(html).toContain("https://locanara.com/"); + expect(html).toContain("https://locanara.hyo.dev/"); }); it("should have og:title", () => { @@ -121,7 +123,7 @@ describe("SEO", () => { it("should have og:image", () => { expect(html).toContain('property="og:image"'); - expect(html).toContain("https://locanara.com/og-image.png"); + expect(html).toContain("https://locanara.hyo.dev/og-image.png"); }); it("should have og:site_name", () => { @@ -160,15 +162,15 @@ describe("SEO", () => { describe("SEO Component", () => { // Test the SEO component constants - const SITE_URL = "https://locanara.com"; + const SITE_URL = "https://locanara.hyo.dev"; const DEFAULT_IMAGE = `${SITE_URL}/og-image.png`; it("should have correct site URL", () => { - expect(SITE_URL).toBe("https://locanara.com"); + expect(SITE_URL).toBe("https://locanara.hyo.dev"); }); it("should have correct default image URL", () => { - expect(DEFAULT_IMAGE).toBe("https://locanara.com/og-image.png"); + expect(DEFAULT_IMAGE).toBe("https://locanara.hyo.dev/og-image.png"); }); it("should generate correct full title with suffix", () => { @@ -180,7 +182,7 @@ describe("SEO", () => { it("should generate correct URL with path", () => { const path = "/community"; const url = `${SITE_URL}${path}`; - expect(url).toBe("https://locanara.com/community"); + expect(url).toBe("https://locanara.hyo.dev/community"); }); }); diff --git a/scripts/agent/compile-context.ts b/scripts/agent/compile-context.ts index 35557af..f2312e0 100644 --- a/scripts/agent/compile-context.ts +++ b/scripts/agent/compile-context.ts @@ -59,8 +59,8 @@ async function generateLlmsTxt(): Promise<{ quick: number; full: number }> { let fullContent = `# Locanara Community SDK Complete Reference > Locanara: Unified on-device AI SDK for iOS/macOS and Android -> Documentation: https://locanara.com -> Quick Reference: https://locanara.com/llms.txt +> Documentation: https://locanara.hyo.dev +> Quick Reference: https://locanara.hyo.dev/llms.txt > Generated: ${new Date().toISOString()} ## Table of Contents @@ -104,18 +104,18 @@ async function generateLlmsTxt(): Promise<{ quick: number; full: number }> { // Add links fullContent += `## Links & Resources -- Documentation: https://locanara.com +- Documentation: https://locanara.hyo.dev - GitHub: https://github.com/hyodotdev/locanara -- Types Reference: https://locanara.com/docs/types -- APIs Reference: https://locanara.com/docs/apis +- Types Reference: https://locanara.hyo.dev/docs/types +- APIs Reference: https://locanara.hyo.dev/docs/apis `; // Generate llms.txt (quick reference) const quickContent = `# Locanara Community SDK Quick Reference > Locanara: On-device AI SDK for iOS/macOS and Android -> Documentation: https://locanara.com -> Full Reference: https://locanara.com/llms-full.txt +> Documentation: https://locanara.hyo.dev +> Full Reference: https://locanara.hyo.dev/llms-full.txt > Generated: ${new Date().toISOString()} ## Overview @@ -218,7 +218,7 @@ enum LocanaraError: Error { ## Links -- Docs: https://locanara.com +- Docs: https://locanara.hyo.dev - GitHub: https://github.com/hyodotdev/locanara `;