Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .knowledge/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ Other web areas are intentionally outside the mobile scope.
- [Design system](design_system/README.md) — mobile visual authority and documentation index
- [Foundations and components](design_system/foundations_and_components.md)
- [Shared packages](integrations/shared_packages.md) — ownership and local consumption of public NPM packages
- [Embedded content](integrations/embedded_content.md) — trusted legal-document WebView and recovery policy
- [Android versioning](integrations/android_versioning.md) — Firebase minimum version and Google Play update behavior

## Authority
Expand Down
30 changes: 30 additions & 0 deletions .knowledge/integrations/embedded_content.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Embedded Content

> Define trusted in-app legal documents, navigation boundaries, and recovery behavior.

Openings embeds only the public privacy policy and terms of service from
`https://openings.dev`. The drawer sends a closed `privacy` or `terms` identifier
to the native web-content route. The screen maps that identifier to a compile-time
URL; route parameters never supply a URL directly.

## Navigation policy

The public `@trebla/managed-webview` package owns WebView lifecycle and navigation
policy. Privacy allows only the exact `/privacy` path and Terms allows only the
exact `/terms` path on the `https://openings.dev` origin. HTTP, credentials,
malformed URLs, other origins, and other paths never load inside the WebView.

The app uses main-document load readiness, a ten-second timeout, and the package's
built-in challenge detection. Loading content stays behind an opaque native cover.
A timeout, network or HTTP failure, process termination, detected challenge, or
external navigation unmounts the document and shows native recovery.

## Recovery and privacy

Recovery offers retry and an explicit browser action when the package provides a
validated fallback target. The app never opens another application automatically.
It sends no search text, saved jobs, viewed state, preferences, notification state,
analytics state, or other local data in legal-document URLs.

Openings owns the native header, six-locale labels, theme values, and recovery
presentation. The website remains the source of truth for the legal prose.
12 changes: 10 additions & 2 deletions .knowledge/integrations/shared_packages.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Shared Packages

> Define ownership and local consumption of the two public Openings foundation packages.
> Define ownership and local consumption of public packages used by Openings Mobile.

## Packages

Expand All @@ -17,14 +17,20 @@ Both packages are public, MIT-licensed, independently versioned NPM artifacts. T
mobile application is private and must never be published as part of their package
contents.

`@trebla/managed-webview` is a public React Native infrastructure package. It owns
HTTPS origin and path policy, readiness, timeout, challenge detection, failure
unmounting, retry, and explicit browser fallback. Openings owns its document URL
catalog, navigation route, localization, theme, and recovery presentation. See
[Embedded content](embedded_content.md) for the consumer contract.

## Local development

Mobile resolves exact public npm releases and Metro uses the standard project
configuration. A fresh clone needs no sibling repository. Changes to either shared
package must be published under semantic versioning before mobile deliberately
updates its exact dependency.

Jest transforms the package boundary explicitly, and the contract test imports the
Jest transforms package boundaries explicitly, and contract tests import the
same public exports the application consumes. Do not bypass package exports with a
relative import into another repository's `src` folder.

Expand All @@ -35,6 +41,8 @@ relative import into another repository's `src` folder.
system, not a screen-specific layout choice.
- Keep React Native components, Expo APIs, device services, navigation, and native
persistence inside mobile.
- Keep Openings-specific URLs, copy, and visual presentation out of
`@trebla/managed-webview`.
- Keep Next.js, DOM, and browser-only behavior inside web.
- Preserve semantic versioning and add package tests before changing an exported
contract.
Expand Down
26 changes: 26 additions & 0 deletions ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1742,6 +1742,28 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- react-native-webview (13.16.1):
- hermes-engine
- RCTRequired
- RCTTypeSafety
- React-Core
- React-Core-prebuilt
- React-debug
- React-Fabric
- React-featureflags
- React-graphics
- React-ImageManager
- React-jsi
- React-NativeModulesApple
- React-RCTFabric
- React-renderercss
- React-rendererdebug
- React-utils
- ReactCodegen
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- React-NativeModulesApple (0.86.3):
- hermes-engine
- React-callinvoker
Expand Down Expand Up @@ -2538,6 +2560,7 @@ DEPENDENCIES:
- React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`)
- React-mutationobservernativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/mutationobserver`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- react-native-webview (from `../node_modules/react-native-webview`)
- React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
- React-networking (from `../node_modules/react-native/ReactCommon/react/networking`)
- React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`)
Expand Down Expand Up @@ -2718,6 +2741,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/react/nativemodule/mutationobserver"
react-native-safe-area-context:
:path: "../node_modules/react-native-safe-area-context"
react-native-webview:
:path: "../node_modules/react-native-webview"
React-NativeModulesApple:
:path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios"
React-networking:
Expand Down Expand Up @@ -2873,6 +2898,7 @@ SPEC CHECKSUMS:
React-microtasksnativemodule: 97a771dbbb4315c71579995b53e4e3e351a99d89
React-mutationobservernativemodule: 530bff1bba9511a5133e3cf8170e3b2c0df49e89
react-native-safe-area-context: 6b4966397ada0f7dd481e4486a2ef936834861a1
react-native-webview: 2a4da2e03d3ec2c731c4d1a389cb86aaa4902167
React-NativeModulesApple: 2b658272ca69df0694cf5d54f9510aa7c33977bc
React-networking: 6be0b80e18e710dd30e77b04838ec46666a7bb78
React-oscompat: cea7c66df8076bd97e95885d7f584b86afffde41
Expand Down
Loading
Loading