A cross-platform EXIF viewer application supporting Android, HarmonyOS, Web, and Desktop (Tauri) platforms.
Your handy tool to view EXIF information of your photos! With this lightweight and simple app, you can effortlessly select any photo from your device and delve into its EXIF data. Gain insights into camera settings, date and time of capture, location, and much more. Whether you're a photography enthusiast or just curious about the technical details behind your images, PhotoChecker has got you covered.
![]() |
![]() |
![]() |
|---|
- Node.js >= 18.0.0
- pnpm >= 8.0.0
# Install dependencies
pnpm install
# Install and setup git hooks
pnpm prepare# Start Tauri development server
pnpm tauri:dev
# Build all projects
pnpm build
# Run all tests
pnpm test
# Lint all projects
pnpm lint
# Format all projects
pnpm formatPhotoChecker/
โโโ packages/ # Shared packages (future)
โโโ apps/ # Applications (future)
โโโ tauri/ # Tauri desktop application
โโโ android/ # Android native application
โโโ harmony/ # HarmonyOS application
โโโ web/ # Web application
โโโ package.json # Root workspace configuration
โโโ pnpm-workspace.yaml # pnpm workspace configuration
โโโ .gitignore # Git ignore rules
pnpm build- Build all projectspnpm dev- Start development servers for all projectspnpm test- Run all testspnpm lint- Lint all projectspnpm lint:fix- Fix linting issuespnpm format- Format all projectspnpm format:check- Check formattingpnpm typecheck- Type check all projectspnpm clean- Clean all node_modules and build outputs
pnpm tauri:dev- Start Tauri development serverpnpm tauri:build- Build Tauri applicationpnpm android:build- Build Android applicationpnpm harmony:build- Build HarmonyOS applicationpnpm web:build- Build and serve web application
- Location:
./tauri/ - Tech Stack: React, TypeScript, Vite, Tauri 2
- Commands:
pnpm tauri:dev,pnpm tauri:build
- Location:
./android/ - Tech Stack: Kotlin, Jetpack Compose
- Commands:
pnpm android:build
- Location:
./harmony/ - Tech Stack: ArkTS
- Commands:
pnpm harmony:build
- Location:
./web/ - Tech Stack: Static files with Docker
- Commands:
pnpm web:build
- Make changes to any platform-specific project
- Test locally using the development server for that platform
- Run linting with
pnpm lint - Format code with
pnpm format - Commit changes using the conventional commit format
- Test across platforms to ensure consistency
This monorepo uses conventional commits and automated tools for quality control:
- Use conventional commit format:
type(scope): description - Interactive commits: Use
pnpm commitfor guided commit creation - Commit validation: Commits are automatically validated with commitlint
feat: ๆฐๅ่ฝ (New features)fix: ไฟฎๅค bug (Bug fixes)docs: ๆๆกฃๆดๆฐ (Documentation updates)style: ไปฃ็ ๆ ผๅผ่ฐๆด (Code formatting changes)refactor: ้ๆ (Code refactoring)test: ๅขๅ ๆต่ฏ (Adding tests)build: ๆๅปบ็ธๅ ณๅๅจ (Build related changes)ci: CI/CD ้ ็ฝฎๅๅจ (CI/CD configuration changes)chore: ๅ ถไปไฟฎๆน (Other changes)revert: ๅๆป (Reverting changes)
- pre-commit: Runs lint-staged to format and lint staged files
- commit-msg: Validates commit messages with commitlint
pnpm release: Creates a new release with changelogpnpm release:patch: Bump patch versionpnpm release:minor: Bump minor versionpnpm release:major: Bump major version
This monorepo uses pnpm workspaces for dependency management:
- Single lockfile:
pnpm-lock.yamlat root - Hoisting: Dependencies are shared between packages
- Efficient: Faster installs and less disk space
- Fork the repository
- Create a feature branch
- Make your changes
- Follow the commit message format
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.



