{"id":37227859,"url":"https://github.com/javilatte/ticket-goat","last_synced_at":"2026-01-15T03:24:29.688Z","repository":{"id":331689875,"uuid":"1128641167","full_name":"javilatte/ticket-goat","owner":"javilatte","description":"TicketGOAT - Personal finance manager","archived":false,"fork":false,"pushed_at":"2026-01-10T19:58:43.000Z","size":2648,"stargazers_count":7,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2026-01-11T05:52:28.327Z","etag":null,"topics":["finance","open-source","privacy"],"latest_commit_sha":null,"homepage":"https://ticketgoat.jagoan.es/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/javilatte.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-06T00:11:42.000Z","updated_at":"2026-01-10T19:49:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/javilatte/ticket-goat","commit_stats":null,"previous_names":["javilatte/ticket-goat"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/javilatte/ticket-goat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javilatte%2Fticket-goat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javilatte%2Fticket-goat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javilatte%2Fticket-goat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javilatte%2Fticket-goat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/javilatte","download_url":"https://codeload.github.com/javilatte/ticket-goat/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javilatte%2Fticket-goat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28442270,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T00:55:22.719Z","status":"online","status_checked_at":"2026-01-15T02:00:08.019Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["finance","open-source","privacy"],"created_at":"2026-01-15T03:24:29.119Z","updated_at":"2026-01-15T03:24:29.676Z","avatar_url":"https://github.com/javilatte.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"assets/ticketGOAT.png\" alt=\"TicketGOAT Logo\" width=\"400\" height=\"58.8\"\u003e\n  \n\n  \n  **Your Personal Finance Tracker**\n  \n  A modern, privacy-focused financial management app with OCR receipt scanning, investment tracking, and multi-account support.\n  \n  [![React Native](https://img.shields.io/badge/React%20Native-0.81-61DAFB?logo=react)](https://reactnative.dev/)\n  [![Expo](https://img.shields.io/badge/Expo-54-000020?logo=expo)](https://expo.dev/)\n  [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-3178C6?logo=typescript)](https://www.typescriptlang.org/)\n  [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)\n  \n  [Features](#features) • [Getting Started](#getting-started) • [Screenshots](#screenshots) • [Tech Stack](#tech-stack) • [Contributing](#contributing)\n\n  \u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://ticketgoat.jagoan.es/sc2-portrait.png\" alt=\"Dashboard\" width=\"300\"\u003e\n  \n  \u003c/div\u003e\n  \n\u003c/div\u003e\n\n---\n\n\u003e ## ⚠️ **IMPORTANT DISCLAIMER - BETA VERSION**\n\u003e \n\u003e **This application is currently in BETA and under active development.**\n\u003e \n\u003e ### 🔐 Data Security\n\u003e - All data is stored **locally on your device** with **AES encryption enabled by default**\n\u003e - Data is encrypted using industry-standard AES encryption via CryptoJS\n\u003e - Encryption keys are securely stored using Expo SecureStore (Keychain on iOS, KeyStore on Android)\n\u003e - You are responsible for maintaining device backups (uninstalling the app will lose the encryption key)\n\u003e - Exported Excel/CSV files are **NOT encrypted** - protect them appropriately\n\u003e - **No warranty is provided** regarding data loss, corruption, or unauthorized access\n\u003e - See [SECURITY.md](SECURITY.md) for detailed security information\n\u003e \n\u003e ### 📊 Stock Price Accuracy\n\u003e - Stock prices are fetched from **Yahoo Finance API** for informational purposes only\n\u003e - Prices may be **delayed, inaccurate, or unavailable**\n\u003e - **DO NOT use this app for making investment decisions**\n\u003e - Always verify prices with official sources before executing trades\n\u003e - The developers are not liable for any financial losses\n\u003e \n\u003e ### 🛡️ General Use\n\u003e - This software is provided \"AS IS\" without warranty of any kind\n\u003e - Use at your own risk\n\u003e - Not intended for commercial or professional financial management\n\u003e - Regular backups (export feature) are strongly recommended\n\u003e \n\u003e **By using TicketGOAT, you acknowledge and accept these limitations.**\n\n---\n\n## ✨ Features\n\n### 💰 Financial Management\n- **Transaction Tracking** - Record income and expenses with customizable categories\n- **Multiple Accounts** - Manage unlimited bank accounts with custom colours and IBAN\n- **Period Filters** - View transactions by month or payroll period\n- **Balance Overview** - Real-time balance calculation across all accounts\n\n### 🎫 OCR Receipt Scanning\n- **Automatic Total Detection** - Scan receipts and extract amounts automatically\n- **Self-hosted Service** - Optional Docker-based OCR service (Python + Tesseract)\n- **Privacy First** - All processing can be done locally\n\n### 📈 Investment Tracking\n- **Stock Portfolio** - Track your investments with real-time price updates\n- **Performance Charts** - Visual representation of gains/losses\n- **Auto-price Updates** - Fetch current stock prices from Yahoo Finance API (for informational purposes only)\n\n\u003e ⚠️ **Investment Disclaimer**: Prices may be delayed or inaccurate. Do not use for trading decisions. Always verify with official sources.\n\n\n### 📊 Data Management\n- **Excel Export** - Multi-sheet workbooks with summary, transactions, accounts, and stocks\n- **CSV Export** - Universal format for data analysis\n- **Import Support** - Restore data from Excel/CSV backups\n- **Local Storage** - All data stays on your device\n- **🔒 AES Encryption** - All data encrypted by default using AES with SecureStore keys\n\n### 🎨 Modern UI/UX\n- **Dark Theme** - Easy on the eyes with a sleek dark interface\n- **Smooth Animations** - Gesture-based navigation between screens\n- **Cross-Platform** - Works on iOS, Android, and Web\n- **Unique branding** - Modern look for a modern app\n\n---\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- [Node.js](https://nodejs.org/) (v20 or higher)\n- [npm](https://www.npmjs.com/) or [yarn](https://yarnpkg.com/)\n- [Expo CLI](https://docs.expo.dev/get-started/installation/)\n\n### Installation\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/javilatte/ticket-goat.git\n   cd ticket-goat\n   ```\n\n2. **Install dependencies**\n   ```bash\n   npm install\n   ```\n\n3. **Start the development server**\n   ```bash\n   npm start\n   ```\n\n4. **Run on your platform**\n   - **iOS**: Press `i` or run `npm run ios`\n   - **Android**: Press `a` or run `npm run android`\n   - **Web**: Press `w` or run `npm run web`\n\n---\n\n## 📱 Screenshots\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"assets/screenshots/sc1.jpg\" alt=\"Dashboard\" width=\"250\"\u003e\n  \u003cimg src=\"assets/screenshots/sc2.jpg\" alt=\"Transactions\" width=\"250\"\u003e\n  \u003cimg src=\"assets/screenshots/sc3.jpg\" alt=\"Stock Portfolio\" width=\"250\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"assets/screenshots/sc4.jpg\" alt=\"Transaction Modal\" width=\"250\"\u003e\n  \u003cimg src=\"assets/screenshots/sc5.jpg\" alt=\"OCR Scanner\" width=\"250\"\u003e\n  \u003cimg src=\"assets/screenshots/sc6.jpg\" alt=\"Account Management\" width=\"250\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"assets/screenshots/sc7.jpg\" alt=\"Settings\" width=\"250\"\u003e\n\u003c/div\u003e\n\n---\n\n## 🛠 Tech Stack\n\n### Frontend\n| Technology | Purpose |\n|------------|---------|\n| [React Native](https://reactnative.dev/) | Cross-platform mobile framework |\n| [Expo SDK 54](https://expo.dev/) | Development toolchain and native APIs |\n| [TypeScript](https://www.typescriptlang.org/) | Static type checking |\n| [AsyncStorage](https://react-native-async-storage.github.io/async-storage/) | Local data persistence |\n| [Expo Secure Store](https://docs.expo.dev/versions/latest/sdk/securestore/) | Encrypted key storage |\n| [SheetJS CE](https://git.sheetjs.com/sheetjs/sheetjs) | Excel file generation |\n| [Axios](https://axios-http.com/) | HTTP client |\n| [React Native SVG](https://github.com/software-mansion/react-native-svg) | Charts and graphics |\n\n### Backend (Optional OCR Service)\n| Technology | Purpose |\n|------------|---------|\n| [Python 3.11](https://www.python.org/) | Runtime environment |\n| [FastAPI](https://fastapi.tiangolo.com/) | REST API framework |\n| [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) | Text recognition engine |\n| [Pillow](https://python-pillow.org/) | Image processing |\n| [Docker](https://www.docker.com/) | Containerization |\n\n---\n\n## 🏗 Project Structure\n\n```\nticket-goat/\n├── assets/                 # Images, fonts, and static files\n├── components/             # React components\n│   ├── Dashboard.tsx\n│   ├── TransactionModal.tsx\n│   ├── SettingsScreen.tsx\n│   └── ...\n├── contexts/               # React Context providers\n│   └── AppContext.tsx\n├── hooks/                  # Custom React hooks\n│   ├── useApp.ts\n│   ├── useTransactions.ts\n│   ├── useAccounts.ts\n│   └── useStocks.ts\n├── services/               # Business logic\n│   ├── database.ts         # Local storage operations\n│   ├── export.ts           # Excel/CSV export\n│   └── stockApi.ts         # Stock price API\n├── styles/                 # StyleSheet definitions\n├── types/                  # TypeScript type definitions\n├── ocr-service/            # Optional OCR backend\n│   ├── Dockerfile\n│   ├── main.py\n│   └── requirements.txt\n├── app.json                # Expo configuration\n├── docker-compose.yml      # Docker orchestration\n└── package.json\n```\n\n---\n\n## 🐳 Docker Setup (Optional OCR Service)\n\n### Quick Start with Docker Compose\n\n```bash\ndocker-compose up -d\n```\n\nThis starts:\n- **OCR API**: http://localhost:8000\n- **Web App**: http://localhost:3000\n\n### OCR Service Only\n\n```bash\ncd ocr-service\ndocker build -t ticketgoat-ocr .\ndocker run -d -p 8000:8000 ticketgoat-ocr\n```\n\n### Configure in App\n\n1. Open the app and go to **Settings**\n2. Find \"Receipt Scanner (OCR)\" section\n3. Enter OCR service URL:\n   - Local: `http://localhost:8000`\n   - Network: `http://192.168.x.x:8000`\n4. Save and scan receipts from expense transactions\n\n---\n\n## 📖 Usage\n\n### Adding Transactions\n\n1. Tap the **\"+ New Transaction\"** button\n2. Choose **Income** or **Expense**\n3. Enter amount, description, and category\n4. For expenses, optionally scan a receipt with OCR\n5. Select account and save\n\n### Managing Accounts\n\n1. Add accounts with custom names and colors\n2. Set initial balance and IBAN (optional)\n3. Edit or delete accounts as needed\n\n### Tracking Stocks\n\n1. Expand the **\"Stocks\"** section on the dashboard by tapping on the title\n2. Tap **\"+ Add\"** to create a new stock entry\n3. Enter symbol (e.g., AAPL), quantity, and purchase price\n4. Tap refresh icon to update current prices\n\n### Exporting Data\n\n1. Go to **Settings** → **Export Data**\n2. Choose **Excel** or **CSV** format\n3. Share via your device's native sharing options\n\n---\n\n## 📥 Download \u0026 Installation\n\n### Android\n\nDownload the latest APK from the [Releases page](https://github.com/javilatte/ticket-goat/releases/latest).\n\n1. Download `TicketGOAT-vX.X.X.apk`\n2. Enable \"Install from Unknown Sources\" in your device settings\n3. Open the APK file and install\n4. Open TicketGOAT and start tracking your finances!\n\n\u003e **Note**: iOS support coming soon.\n\n### Build from Source\n\nSee [Getting Started](#getting-started) section for development setup instructions.\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome! Please follow these steps:\n\n1. **Fork** the repository\n2. **Create** a feature branch (`git checkout -b feature/AmazingFeature`)\n3. **Commit** your changes (`git commit -m 'Add some AmazingFeature'`)\n4. **Push** to the branch (`git push origin feature/AmazingFeature`)\n5. **Open** a Pull Request\n\n### Development Guidelines\n\n- Follow TypeScript strict mode\n- Use functional components with hooks\n- Document code with JSDoc comments\n- Keep components small and focused\n- Write meaningful commit messages\n\n---\n\n## 🔒 Privacy \u0026 Security\n\n- **100% Local Storage** - All data stays on your device using AsyncStorage\n- **No Cloud Sync** - No external servers or tracking\n- **No Encryption by Default** - AsyncStorage is unencrypted; device security is your responsibility\n- **Optional Encryption** - Built-in encryption utilities available (must be manually enabled)\n- **Optional OCR** - Self-host the OCR service if needed\n- **Self-Hosted OCR** - Run the OCR service locally for complete privacy\n\n\u003e ⚠️ **OCR Security Notice**: The OCR service uses HTTP by default. Only use in local/trusted networks. HTTPS configuration required for production environments.\n\n\u003e 💡 **Recommendation**: Enable device encryption, use strong passwords/biometrics, and perform regular data exports as backups.\n\n---\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n## 🙏 Acknowledgments\n\n- **Stack Sans Notch** - Custom font for branding\n- **Yahoo Finance API** - Free stock price data\n- **Tesseract OCR** - Open-source text recognition\n- **Expo Team** - Amazing development tools\n\n---\n\n## 📞 Support\n\n- **Issues**: [GitHub Issues](https://github.com/javilatte/ticket-goat/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/javilatte/ticket-goat/discussions)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  Made with ❤️ for personal finance management by the TicketGOAT team\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavilatte%2Fticket-goat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjavilatte%2Fticket-goat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavilatte%2Fticket-goat/lists"}