[{"data":1,"prerenderedAt":545},["ShallowReactive",2],{"navigation":3,"/getting-started/installation":166,"/getting-started/installation-surround":540},[4,23,44,89,111,136],{"title":5,"path":6,"stem":7,"children":8,"icon":22},"Getting Started","/getting-started","1.getting-started/1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Usage","/getting-started/usage","1.getting-started/3.usage","i-lucide-sliders",false,{"title":24,"icon":22,"path":25,"stem":26,"children":27,"page":22},"Time tracking & monitoring","/time-tracking","2.Time Tracking",[28,32,36,40],{"title":29,"path":30,"stem":31},"Time & Projects","/time-tracking/timeandprojects","2.Time Tracking/Time&Projects",{"title":33,"path":34,"stem":35},"Time Tracking","/time-tracking/time-tracking","2.Time Tracking/Time-tracking",{"title":37,"path":38,"stem":39},"Timeboard","/time-tracking/timeboard","2.Time Tracking/TimeBoard",{"title":41,"path":42,"stem":43},"Timesheets","/time-tracking/timesheets","2.Time Tracking/Timesheets",{"title":45,"icon":22,"path":46,"stem":47,"children":48,"page":22},"Features","/features","3.features",[49,53,57,61,65,69,73,77,81,85],{"title":50,"path":51,"stem":52},"Dashboard","/features/dashboard","3.features/1.dashboard",{"title":54,"path":55,"stem":56},"SMTP troubleshoot","/features/smtp-troubleshoot","3.features/10.smtp-troubleshoot",{"title":58,"path":59,"stem":60},"Calendar & Leave Overview","/features/calendar","3.features/2.calendar",{"title":62,"path":63,"stem":64},"Calendar Integration","/features/calendar-integration","3.features/3.calendar-integration",{"title":66,"path":67,"stem":68},"Shift Scheduling","/features/schedules","3.features/4.schedules",{"title":70,"path":71,"stem":72},"Project Management","/features/projects","3.features/5.projects",{"title":74,"path":75,"stem":76},"Expense Settings","/features/expense-settings","3.features/6.expense-settings",{"title":78,"path":79,"stem":80},"Auth0 SSO Integration","/features/auth0-integration","3.features/7.auth0-integration",{"title":82,"path":83,"stem":84},"Password & Authentication Policy","/features/policies","3.features/8.policies",{"title":86,"path":87,"stem":88},"Email Configuration (SMTP)","/features/email-configuration","3.features/9.email-configuration",{"title":90,"icon":22,"path":91,"stem":92,"children":93,"page":22},"Expenses","/expenses","4.expenses",[94,98,102,106],{"title":95,"path":96,"stem":97},"Expense Claims","/expenses/overview","4.expenses/1.overview",{"title":99,"path":100,"stem":101},"Add & Manage Purchases","/expenses/purchases","4.expenses/2.purchases",{"title":103,"path":104,"stem":105},"Travel & Mileage Entry","/expenses/travelentries","4.expenses/3.travelentries",{"title":107,"path":108,"stem":109,"icon":110},"Company Card Expenses","/expenses/company-cards","4.expenses/4.company-cards","i-lucide-credit-card",{"title":112,"icon":22,"path":113,"stem":114,"children":115,"page":22},"Settings","/settings","5.settings",[116,120,124,128,132],{"title":117,"path":118,"stem":119},"General","/settings/general","5.settings/1.general",{"title":121,"path":122,"stem":123},"Leave Types","/settings/leavetype","5.settings/2.leaveType",{"title":125,"path":126,"stem":127},"Carry Forward","/settings/carryforward","5.settings/3.carryForward",{"title":129,"path":130,"stem":131},"Department Management","/settings/departments","5.settings/4.departments",{"title":133,"path":134,"stem":135},"Public Holidays","/settings/publicholiday","5.settings/5.publicholiday",{"title":137,"path":138,"stem":139,"children":140,"page":22},"Mcp","/mcp","6.mcp",[141,146,151,156,161],{"title":142,"path":143,"stem":144,"icon":145},"Overview","/mcp/overview","6.mcp/1.overview","i-lucide-bot",{"title":147,"path":148,"stem":149,"icon":150},"Connecting","/mcp/connecting","6.mcp/2.connecting","i-lucide-plug",{"title":152,"path":153,"stem":154,"icon":155},"Tools Reference","/mcp/tools","6.mcp/3.tools","i-lucide-wrench",{"title":157,"path":158,"stem":159,"icon":160},"Security","/mcp/security","6.mcp/4.security","i-lucide-shield",{"title":162,"path":163,"stem":164,"icon":165},"Integrating Your Own MCP Client","/mcp/custom-client","6.mcp/5.custom-client","i-lucide-code",{"id":167,"title":13,"body":168,"description":533,"extension":534,"links":535,"meta":536,"navigation":537,"path":14,"seo":538,"stem":15,"__hash__":539},"docs/1.getting-started/2.installation.md",{"type":169,"value":170,"toc":514},"minimark",[171,175,180,183,196,207,211,216,219,230,234,245,251,257,264,268,275,281,286,313,318,324,328,331,337,340,344,347,353,360,374,378,381,387,390,396,400,403,409,412,418,425,429,432,438,441,445,448,462,466,469,483,487,490],[172,173,174],"p",{},"BookYourPTO can be deployed in minutes using Docker and Docker Compose. This guide walks you through cloning the repository, configuring environment variables, and starting your application.",[176,177,179],"h2",{"id":178},"prerequisites","Prerequisites",[172,181,182],{},"Before you begin, ensure you have the following installed on your system:",[184,185,186,190,193],"ul",{},[187,188,189],"li",{},"Docker Engine",[187,191,192],{},"Docker Compose",[187,194,195],{},"Git",[172,197,198,199,206],{},"If you need to install Docker, visit the ",[200,201,205],"a",{"href":202,"rel":203},"https://docs.docker.com/engine/install/",[204],"nofollow","official Docker installation guide",".",[176,208,210],{"id":209},"quick-start","Quick Start",[212,213,215],"h3",{"id":214},"step-1-clone-the-repository","Step 1: Clone the Repository",[172,217,218],{},"Clone the BookYourPTO repository from GitHub:",[220,221,226],"pre",{"className":222,"code":224,"language":225},[223],"language-text","git clone https://github.com/anhourtec/BookYourPTO.git\ncd BookYourPTO\n","text",[227,228,224],"code",{"__ignoreMap":229},"",[212,231,233],{"id":232},"step-2-update-postgresql-password","Step 2: Update PostgreSQL Password",[172,235,236,240,241,244],{},[237,238,239],"strong",{},"Important:"," Before deployment, change the default PostgreSQL password in ",[227,242,243],{},"docker-compose.yml",":",[172,246,247,248,250],{},"Open ",[227,249,243],{}," and locate the postgres service:",[220,252,255],{"className":253,"code":254,"language":225},[223],"postgres:\n  environment:\n    POSTGRES_USER: postgres\n    POSTGRES_PASSWORD: postgres123  # Change this to a strong password\n    POSTGRES_DB: bookyourpto\n",[227,256,254],{"__ignoreMap":229},[172,258,259,260,263],{},"Change ",[227,261,262],{},"postgres123"," to a strong, unique password. You'll need this password in the next step.",[212,265,267],{"id":266},"step-3-configure-environment-variables","Step 3: Configure Environment Variables",[172,269,270,271,274],{},"Create a ",[227,272,273],{},".env"," file in the root directory with your configuration:",[220,276,279],{"className":277,"code":278,"language":225},[223],"# Database connection - Update password to match docker-compose.yml\nDATABASE_URL=\"postgresql://postgres:YOUR_STRONG_PASSWORD@postgres:5432/bookyourpto\"\n\n# JWT Secrets - CHANGE THESE!\nJWT_SECRET=\"production-jwt-secret-minimum-32-characters-change-me\"\nREFRESH_SECRET=\"production-refresh-secret-different-from-jwt-also-32-chars\"\n\n# Application environment\nNODE_ENV=\"production\"\n",[227,280,278],{"__ignoreMap":229},[172,282,283],{},[237,284,285],{},"Important Security Notes:",[184,287,288,297,307,310],{},[187,289,290,291,294,295],{},"Replace ",[227,292,293],{},"YOUR_STRONG_PASSWORD"," with the same password you set in ",[227,296,243],{},[187,298,259,299,302,303,306],{},[227,300,301],{},"JWT_SECRET"," and ",[227,304,305],{},"REFRESH_SECRET"," to unique, random strings of at least 32 characters",[187,308,309],{},"Never commit these secrets to version control",[187,311,312],{},"Consider using a password generator for strong credentials",[172,314,315],{},[237,316,317],{},"Also update the DATABASE_URL in two places in docker-compose.yml:",[220,319,322],{"className":320,"code":321,"language":225},[223],"app:\n  build:\n    args:\n      DATABASE_URL: postgresql://postgres:YOUR_STRONG_PASSWORD@postgres:5432/bookyourpto\n  environment:\n    DATABASE_URL: postgresql://postgres:YOUR_STRONG_PASSWORD@postgres:5432/bookyourpto\n",[227,323,321],{"__ignoreMap":229},[212,325,327],{"id":326},"step-4-build-the-application","Step 4: Build the Application",[172,329,330],{},"Build the Docker images:",[220,332,335],{"className":333,"code":334,"language":225},[223],"docker-compose build\n",[227,336,334],{"__ignoreMap":229},[172,338,339],{},"This command compiles the application and prepares all dependencies inside Docker containers.",[212,341,343],{"id":342},"step-5-start-the-application","Step 5: Start the Application",[172,345,346],{},"Launch the application stack with Docker Compose:",[220,348,351],{"className":349,"code":350,"language":225},[223],"docker-compose up -d\n",[227,352,350],{"__ignoreMap":229},[172,354,355,356,359],{},"The ",[227,357,358],{},"-d"," flag runs containers in detached mode (background). Docker Compose will start two services:",[184,361,362,368],{},[187,363,364,367],{},[237,365,366],{},"bookyourpto-app",": The Nuxt application server (port 3010)",[187,369,370,373],{},[237,371,372],{},"bookyourpto-postgres",": The PostgreSQL database",[212,375,377],{"id":376},"step-6-verify-deployment","Step 6: Verify Deployment",[172,379,380],{},"Check that both containers are running:",[220,382,385],{"className":383,"code":384,"language":225},[223],"docker-compose ps\n",[227,386,384],{"__ignoreMap":229},[172,388,389],{},"You should see output similar to:",[220,391,394],{"className":392,"code":393,"language":225},[223],"       Name                 Command             State              Ports       \n--------------------------------------------------------------------------------\nbookyourpto-app        docker-entrypoint.sh   Up             0.0.0.0:3010->\n                       npm r ...                             3000/tcp\nbookyourpto-postgres   docker-entrypoint.sh   Up (healthy)   5432/tcp\n",[227,395,393],{"__ignoreMap":229},[176,397,399],{"id":398},"view-application-logs","View Application Logs",[172,401,402],{},"Monitor real-time logs from both containers:",[220,404,407],{"className":405,"code":406,"language":225},[223],"docker-compose logs -f\n",[227,408,406],{"__ignoreMap":229},[172,410,411],{},"A successful deployment will show:",[220,413,416],{"className":414,"code":415,"language":225},[223],"✓ Database is ready!\n✓ Database initialization completed successfully!\n✓ Application is ready to start.\nListening on http://0.0.0.0:3000\n",[227,417,415],{"__ignoreMap":229},[172,419,420,421,424],{},"Press ",[227,422,423],{},"Ctrl+C"," to exit log viewing (containers will keep running).",[176,426,428],{"id":427},"access-your-application","Access Your Application",[172,430,431],{},"Once deployed, BookYourPTO will be available at:",[220,433,436],{"className":434,"code":435,"language":225},[223],"http://localhost:3010\n",[227,437,435],{"__ignoreMap":229},[172,439,440],{},"The application runs on port 3000 inside the container but is mapped to port 3010 on your host machine.",[176,442,444],{"id":443},"configuration-summary","Configuration Summary",[172,446,447],{},"After completing the installation, you should have updated:",[449,450,451,456],"ol",{},[187,452,453,455],{},[237,454,243],{},": PostgreSQL password in three locations (POSTGRES_PASSWORD, build args, runtime environment)",[187,457,458,461],{},[237,459,460],{},".env file",": DATABASE_URL with matching password, JWT secrets",[176,463,465],{"id":464},"next-steps","Next Steps",[172,467,468],{},"Now that BookYourPTO is running, you can:",[184,470,471,474,477,480],{},[187,472,473],{},"Create your first organization",[187,475,476],{},"Set up SMTP Configuration",[187,478,479],{},"Set up Timezones and Departments",[187,481,482],{},"Manage users and roles",[176,484,486],{"id":485},"production-deployment-tips","Production Deployment Tips",[172,488,489],{},"For production environments:",[184,491,492,495,498,505,508,511],{},[187,493,494],{},"Use strong, randomly generated passwords for PostgreSQL",[187,496,497],{},"Consider using Docker secrets instead of environment variables for sensitive data",[187,499,500,501,504],{},"Set up regular database backups of the ",[227,502,503],{},"postgres_data"," volume",[187,506,507],{},"Configure SSL/TLS certificates for HTTPS access",[187,509,510],{},"Review and harden your firewall rules",[187,512,513],{},"Monitor logs regularly for security events",{"title":229,"searchDepth":515,"depth":516,"links":517},1,2,[518,519,528,529,530,531,532],{"id":178,"depth":516,"text":179},{"id":209,"depth":516,"text":210,"children":520},[521,523,524,525,526,527],{"id":214,"depth":522,"text":215},3,{"id":232,"depth":522,"text":233},{"id":266,"depth":522,"text":267},{"id":326,"depth":522,"text":327},{"id":342,"depth":522,"text":343},{"id":376,"depth":522,"text":377},{"id":398,"depth":516,"text":399},{"id":427,"depth":516,"text":428},{"id":443,"depth":516,"text":444},{"id":464,"depth":516,"text":465},{"id":485,"depth":516,"text":486},"Deploy BookYourPTO with Docker in minutes.","md",null,{},{"icon":16},{"title":13,"description":533},"CsIvQDcMNnkBx-HYhiDmvG2dYQqb7aNfPCBse-_fsp4",[541,543],{"title":10,"path":6,"stem":7,"description":542,"icon":11,"children":-1},"Welcome to the BookYourPTO documentation.",{"title":18,"path":19,"stem":20,"description":544,"icon":21,"children":-1},"Learn how to use and customize BookYourPTO for your organization.",1774284204318]