{"id":35468031,"url":"https://github.com/nicmart-dev/linguistnow","last_synced_at":"2026-05-04T04:06:23.817Z","repository":{"id":241665107,"uuid":"807353005","full_name":"nicmart-dev/linguistnow","owner":"nicmart-dev","description":"LinguistNow simplifies the hassle of finding available linguists for translation projects.","archived":false,"fork":false,"pushed_at":"2026-05-03T22:51:18.000Z","size":25191,"stargazers_count":2,"open_issues_count":16,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-03T23:27:02.697Z","etag":null,"topics":["airtable","brainstation","capstone-project","express","localization","n8n-workflow","oauth2","react","react-intl","tailwindcss","tanstack-table"],"latest_commit_sha":null,"homepage":"https://linguistnow.nicmart.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nicmart-dev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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":"2024-05-29T00:05:05.000Z","updated_at":"2026-05-03T22:51:21.000Z","dependencies_parsed_at":"2024-05-29T15:29:24.641Z","dependency_job_id":"47ca649c-4333-44a4-a1fd-ffe54b0e2b33","html_url":"https://github.com/nicmart-dev/linguistnow","commit_stats":null,"previous_names":["nicmart-dev/linguistnow"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/nicmart-dev/linguistnow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicmart-dev%2Flinguistnow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicmart-dev%2Flinguistnow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicmart-dev%2Flinguistnow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicmart-dev%2Flinguistnow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nicmart-dev","download_url":"https://codeload.github.com/nicmart-dev/linguistnow/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicmart-dev%2Flinguistnow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32593988,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"online","status_checked_at":"2026-05-04T02:00:06.625Z","response_time":58,"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":["airtable","brainstation","capstone-project","express","localization","n8n-workflow","oauth2","react","react-intl","tailwindcss","tanstack-table"],"created_at":"2026-01-03T10:21:09.330Z","updated_at":"2026-05-04T04:06:23.812Z","avatar_url":"https://github.com/nicmart-dev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LinguistNow\n\n\u003e Simplifying the hassle of finding available linguists for translation projects.\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Features](#features)\n- [Installation](#installation)\n- [Tech Stack](#tech-stack)\n- [Architecture](#architecture)\n- [Documentation](#documentation)\n- [Roadmap](#roadmap)\n- [About](#about)\n\n## Overview\n\n### The Problem\n\nLinguists (freelance translators) often work with multiple translation agencies or language service providers (LSPs). Managing availability across all clients is challenging:\n\n- They manually enter availability in multiple systems\n- They must remember to notify each client about holidays\n- Availability quickly becomes outdated without a single source of truth\n- Some linguists accept work before checking their calendar, causing delays when conflicts arise\n\n📽️ See the 3-minute pitch [slides](https://www.canva.com/design/DAGH8QYv9D0/ErSLJJqaQy9WQG6f6aKHWQ/view)\n\n### The Solution\n\nLinguistNow connects to linguists' Google Calendars to provide real-time availability information to project managers, eliminating manual availability tracking.\n\n### User Profiles\n\n- **Project Managers** - Add linguists and instantly see who's available for translation projects\n- **Linguists** - Connect their Google Calendar once and let availability sync automatically\n\n## Features\n\n| Feature                     | Description                                                                   |\n| --------------------------- | ----------------------------------------------------------------------------- |\n| 🔐 **Authentication**       | Secure Google OAuth2 login with role-based access control                     |\n| 📅 **Calendar Integration** | Real-time availability from Google Calendar                                   |\n| 👥 **Linguist Management**  | CRUD operations for managing linguist profiles                                |\n| 🌍 **Internationalization** | Support for 11 languages including English, French, Spanish, German, and more |\n| 🔒 **Secure Token Storage** | OAuth tokens stored in HashiCorp Vault                                        |\n\n## Installation\n\nFollow the [Installation Guide](./docs/install-instructions.md) to set up the application locally.\n\nFor Docker deployment, see [Deploy Locally with Docker](./docs/deploy-local-docker.md).\n\n## Tech Stack\n\n### Frontend\n\n- React 19 with Vite\n- React Router v7\n- Tailwind CSS v4\n- shadcn/ui components\n- TanStack Table\n- i18next for internationalization\n\n### Backend\n\n- Node.js with Express.js\n- TypeScript (strict mode)\n- HashiCorp Vault for secure token storage\n- n8n for scheduled token refresh\n\n### External Services\n\n- **Database**: Airtable\n- **Authentication**: Google OAuth2\n- **Calendar API**: Google Calendar freeBusy API\n\n### Deployment\n\n- **Frontend**: Netlify\n- **Backend**: Render\n- **Infrastructure**: Docker Compose\n\n## Architecture\n\n```\nlinguistnow/\n├── client/           # React frontend\n│   ├── src/\n│   │   ├── components/\n│   │   ├── pages/\n│   │   └── i18n/     # Internationalization\n│   └── public/\n├── server/           # Express backend\n│   ├── controllers/\n│   ├── services/     # Business logic\n│   ├── routes/\n│   └── utils/\n├── shared/           # Shared TypeScript types\n├── n8n/              # Workflow automation configs\n├── docs/             # Documentation\n└── docker-compose.yml\n```\n\n**Design Principles**: Component-based design with DRY principles, API-first development, and TDD.\n\nSee [Architecture Overview](./docs/architecture-overview.md) for details.\n\n## Documentation\n\n| Document                                                                    | Description                  |\n| --------------------------------------------------------------------------- | ---------------------------- |\n| [Install Instructions](./docs/install-instructions.md)                      | Local development setup      |\n| [Architecture Overview](./docs/architecture-overview.md)                    | System architecture          |\n| [Dashboard Design](./docs/dashboard-design.md)                              | Dashboard feature design     |\n| [Linguist Settings Design](./docs/linguist-settings-design.md)              | Settings page feature design |\n| [Google Calendar Integration](./docs/integration-of-google-calendar-api.md) | Calendar API implementation  |\n| [Vault Integration](./docs/vault-integration-guide.md)                      | Secure token storage         |\n| [Airtable Data Structure](./docs/store-user-data-in-airtable.md)            | Database schema              |\n| [User Journey \u0026 Sitemap](./docs/sitemap-and-user-journey.md)                | UX documentation             |\n| [Google Authentication](./docs/google-authentication.md)                    | OAuth2 flow                  |\n\n## Roadmap\n\nTrack progress on the [GitHub Project Board](https://github.com/users/nicmart-dev/projects/1/views/6).\n\n### Planned Features\n\n- Multi-calendar provider support (Outlook, Apple Calendar, Calendly)\n- Bulk availability checking\n- Advanced timezone handling\n- Email notifications\n\nSee the [backlog](https://github.com/users/nicmart-dev/projects/1/views/8) for the complete list.\n\n## About\n\nThis capstone project was developed by **Nicolas Martinez** as part of the Web Development Diploma Program at BrainStation.\n\nWith 20+ years in the Localization \u0026 Translation industry and 7 years as a Technical Product Manager, this project combines domain expertise with modern development practices.\n\n---\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicmart-dev%2Flinguistnow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnicmart-dev%2Flinguistnow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicmart-dev%2Flinguistnow/lists"}