[{"data":1,"prerenderedAt":497},["ShallowReactive",2],{"navigation_docs":3,"-developer-development":218,"-developer-development-surround":492},[4,20,45,75,95,105,140,168,198],{"title":5,"path":6,"stem":7,"children":8,"page":19},"Introduction","\u002Fintroduction","1.introduction",[9,14],{"title":10,"path":11,"stem":12,"icon":13},"What is GO?","\u002Fintroduction\u002Fwhat-is-go","1.introduction\u002F1.what-is-go","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Features","\u002Fintroduction\u002Ffeatures","1.introduction\u002F2.features","i-lucide-sparkles",false,{"title":21,"path":22,"stem":23,"children":24,"page":19},"Getting Started","\u002Fgetting-started","2.getting-started",[25,30,35,40],{"title":26,"path":27,"stem":28,"icon":29},"Installation","\u002Fgetting-started\u002Finstallation","2.getting-started\u002F1.installation","i-lucide-download",{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fgetting-started\u002Fconfiguration","2.getting-started\u002F2.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"First Setup","\u002Fgetting-started\u002Ffirst-setup","2.getting-started\u002F3.first-setup","i-lucide-rocket",{"title":41,"path":42,"stem":43,"icon":44},"Updating","\u002Fgetting-started\u002Fupdating","2.getting-started\u002F4.updating","i-lucide-refresh-cw",{"title":46,"icon":19,"path":47,"stem":48,"children":49,"page":19},"User Guide","\u002Fuser-guide","3.user-guide",[50,55,60,65,70],{"title":51,"path":52,"stem":53,"icon":54},"Creating a Short Link","\u002Fuser-guide\u002Fcreating-a-short-link","3.user-guide\u002F1.creating-a-short-link","i-lucide-link",{"title":56,"path":57,"stem":58,"icon":59},"Expiration","\u002Fuser-guide\u002Fexpiration","3.user-guide\u002F2.expiration","i-lucide-clock",{"title":61,"path":62,"stem":63,"icon":64},"Renewing Links","\u002Fuser-guide\u002Frenewing-links","3.user-guide\u002F3.renewing-links","i-lucide-repeat",{"title":66,"path":67,"stem":68,"icon":69},"Dashboard","\u002Fuser-guide\u002Fdashboard","3.user-guide\u002F4.dashboard","i-lucide-layout-dashboard",{"title":71,"path":72,"stem":73,"icon":74},"Analytics","\u002Fuser-guide\u002Fanalytics","3.user-guide\u002F5.analytics","i-lucide-bar-chart-3",{"title":76,"path":77,"stem":78,"children":79,"page":19},"Authentication","\u002Fauthentication","4.authentication",[80,85,90],{"title":81,"path":82,"stem":83,"icon":84},"Email Login","\u002Fauthentication\u002Femail-login","4.authentication\u002F1.email-login","i-lucide-mail",{"title":86,"path":87,"stem":88,"icon":89},"Google Login","\u002Fauthentication\u002Fgoogle-login","4.authentication\u002F2.google-login","i-lucide-globe",{"title":91,"path":92,"stem":93,"icon":94},"Firebase Setup","\u002Fauthentication\u002Ffirebase-setup","4.authentication\u002F3.firebase-setup","i-simple-icons-firebase",{"title":96,"path":97,"stem":98,"children":99,"page":19},"Captcha","\u002Fcaptcha","5.captcha",[100],{"title":101,"path":102,"stem":103,"icon":104},"Cloudflare Turnstile","\u002Fcaptcha\u002Fcloudflare-turnstile","5.captcha\u002F1.cloudflare-turnstile","i-simple-icons-cloudflare",{"title":106,"path":107,"stem":108,"children":109,"page":19},"Administration","\u002Fadministration","6.administration",[110,115,120,125,130,135],{"title":111,"path":112,"stem":113,"icon":114},"Admin Panel","\u002Fadministration\u002Fadmin-panel","6.administration\u002F1.admin-panel","i-lucide-shield",{"title":116,"path":117,"stem":118,"icon":119},"Users","\u002Fadministration\u002Fusers","6.administration\u002F2.users","i-lucide-users",{"title":121,"path":122,"stem":123,"icon":124},"Links","\u002Fadministration\u002Flinks","6.administration\u002F3.links","i-lucide-link-2",{"title":126,"path":127,"stem":128,"icon":129},"Reports","\u002Fadministration\u002Freports","6.administration\u002F4.reports","i-lucide-flag",{"title":131,"path":132,"stem":133,"icon":134},"Bans & Timeouts","\u002Fadministration\u002Fbans-and-timeouts","6.administration\u002F5.bans-and-timeouts","i-lucide-user-x",{"title":136,"path":137,"stem":138,"icon":139},"Audit Logs","\u002Fadministration\u002Faudit-logs","6.administration\u002F6.audit-logs","i-lucide-scroll",{"title":141,"path":142,"stem":143,"children":144,"page":19},"Deployment","\u002Fdeployment","7.deployment",[145,150,155,160,165],{"title":146,"path":147,"stem":148,"icon":149},"VPS Installation","\u002Fdeployment\u002Fvps-installation","7.deployment\u002F1.vps-installation","i-lucide-server",{"title":151,"path":152,"stem":153,"icon":154},"Environment Variables","\u002Fdeployment\u002Fenvironment-variables","7.deployment\u002F2.environment-variables","i-lucide-sliders",{"title":156,"path":157,"stem":158,"icon":159},"Cloudflare Tunnel","\u002Fdeployment\u002Fcloudflare-tunnel","7.deployment\u002F3.cloudflare-tunnel","i-lucide-network",{"title":161,"path":162,"stem":163,"icon":164},"Systemd","\u002Fdeployment\u002Fsystemd","7.deployment\u002F4.systemd","i-lucide-cpu",{"title":41,"path":166,"stem":167,"icon":44},"\u002Fdeployment\u002Fupdating","7.deployment\u002F5.updating",{"title":169,"path":170,"stem":171,"children":172,"page":19},"Developer","\u002Fdeveloper","8.developer",[173,178,183,188,193],{"title":174,"path":175,"stem":176,"icon":177},"Architecture","\u002Fdeveloper\u002Farchitecture","8.developer\u002F1.architecture","i-lucide-box",{"title":179,"path":180,"stem":181,"icon":182},"API Architecture","\u002Fdeveloper\u002Fapi","8.developer\u002F2.api","i-lucide-code-xml",{"title":184,"path":185,"stem":186,"icon":187},"Database","\u002Fdeveloper\u002Fdatabase","8.developer\u002F3.database","i-lucide-database",{"title":189,"path":190,"stem":191,"icon":192},"Development","\u002Fdeveloper\u002Fdevelopment","8.developer\u002F4.development","i-lucide-terminal",{"title":194,"path":195,"stem":196,"icon":197},"Building Releases","\u002Fdeveloper\u002Fbuilding-releases","8.developer\u002F5.building-releases","i-lucide-package-check",{"title":199,"path":200,"stem":201,"children":202,"page":19},"Reference","\u002Freference","9.reference",[203,208,213],{"title":204,"path":205,"stem":206,"icon":207},"Configuration Reference","\u002Freference\u002Fconfiguration","9.reference\u002F1.configuration","i-lucide-file-cog",{"title":209,"path":210,"stem":211,"icon":212},"API Reference","\u002Freference\u002Fapi-reference","9.reference\u002F2.api-reference","i-lucide-webhook",{"title":214,"path":215,"stem":216,"icon":217},"Changelog","\u002Freference\u002Fchangelog","9.reference\u002F3.changelog","i-lucide-history",{"id":219,"title":189,"body":220,"description":483,"extension":484,"links":485,"meta":486,"navigation":487,"path":190,"seo":488,"stem":191,"__hash__":491},"docs\u002F8.developer\u002F4.development.md",{"type":221,"value":222,"toc":472},"minimark",[223,227,231,234,239,261,263,267,468],[224,225,189],"h1",{"id":226},"development",[228,229,230],"p",{},"Contributing to GO Shortener or running it in a local development environment requires only standard Go tooling.",[232,233],"hr",{},[235,236,238],"h2",{"id":237},"prerequisites","Prerequisites",[240,241,242,253],"ul",{},[243,244,245,252],"li",{},[246,247,251],"a",{"href":248,"rel":249},"https:\u002F\u002Fgo.dev\u002Fdl\u002F",[250],"nofollow","Go 1.22+"," installed on your machine.",[243,254,255,260],{},[246,256,259],{"href":257,"rel":258},"https:\u002F\u002Fgit-scm.com\u002F",[250],"Git"," installed.",[232,262],{},[235,264,266],{"id":265},"local-setup","Local Setup",[268,269,270,275,278,315,319,326,342,357,361,364,397,401,404,430,434,440,461],"steps",{},[271,272,274],"h3",{"id":273},"_1-clone-the-repository","1. Clone the Repository",[228,276,277],{},"Clone the codebase to your local development workstation:",[279,280,286],"pre",{"className":281,"code":282,"filename":283,"language":284,"meta":285,"style":285},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git clone https:\u002F\u002Fgithub.com\u002FItsARCn\u002FGo-shortner.git\ncd Go-shortner\n","Terminal","bash","",[287,288,289,305],"code",{"__ignoreMap":285},[290,291,294,298,302],"span",{"class":292,"line":293},"line",1,[290,295,297],{"class":296},"sBMFI","git",[290,299,301],{"class":300},"sfazB"," clone",[290,303,304],{"class":300}," https:\u002F\u002Fgithub.com\u002FItsARCn\u002FGo-shortner.git\n",[290,306,308,312],{"class":292,"line":307},2,[290,309,311],{"class":310},"s2Zo4","cd",[290,313,314],{"class":300}," Go-shortner\n",[271,316,318],{"id":317},"_2-configure-local-environment","2. Configure Local Environment",[228,320,321,322,325],{},"Copy the development environment template to ",[287,323,324],{},".env",":",[279,327,329],{"className":281,"code":328,"filename":283,"language":284,"meta":285,"style":285},"cp .env.example .env\n",[287,330,331],{"__ignoreMap":285},[290,332,333,336,339],{"class":292,"line":293},[290,334,335],{"class":296},"cp",[290,337,338],{"class":300}," .env.example",[290,340,341],{"class":300}," .env\n",[228,343,344,345,348,349,352,353,356],{},"The default values in ",[287,346,347],{},".env.example"," are pre-configured for local testing (binding to ",[287,350,351],{},"http:\u002F\u002Flocalhost:3000"," with SQLite storage in ",[287,354,355],{},".\u002Fdata\u002Fgo-dev.sqlite",").",[271,358,360],{"id":359},"_3-sync-frontend-assets","3. Sync Frontend Assets",[228,362,363],{},"Before compiling or running tests, ensure that the embedded filesystem package contains the latest frontend assets:",[279,365,367],{"className":281,"code":366,"filename":283,"language":284,"meta":285,"style":285},"mkdir -p backend\u002Finternal\u002Fembedded\u002Fpublic\ncp -r frontend\u002Fpublic\u002F* backend\u002Finternal\u002Fembedded\u002Fpublic\u002F\n",[287,368,369,380],{"__ignoreMap":285},[290,370,371,374,377],{"class":292,"line":293},[290,372,373],{"class":296},"mkdir",[290,375,376],{"class":300}," -p",[290,378,379],{"class":300}," backend\u002Finternal\u002Fembedded\u002Fpublic\n",[290,381,382,384,387,390,394],{"class":292,"line":307},[290,383,335],{"class":296},[290,385,386],{"class":300}," -r",[290,388,389],{"class":300}," frontend\u002Fpublic\u002F",[290,391,393],{"class":392},"sTEyZ","*",[290,395,396],{"class":300}," backend\u002Finternal\u002Fembedded\u002Fpublic\u002F\n",[271,398,400],{"id":399},"_4-run-automated-test-suite","4. Run Automated Test Suite",[228,402,403],{},"Execute the Go test suite across all internal packages:",[279,405,407],{"className":281,"code":406,"filename":283,"language":284,"meta":285,"style":285},"cd backend\ngo test -v .\u002F...\n",[287,408,409,416],{"__ignoreMap":285},[290,410,411,413],{"class":292,"line":293},[290,412,311],{"class":310},[290,414,415],{"class":300}," backend\n",[290,417,418,421,424,427],{"class":292,"line":307},[290,419,420],{"class":296},"go",[290,422,423],{"class":300}," test",[290,425,426],{"class":300}," -v",[290,428,429],{"class":300}," .\u002F...\n",[271,431,433],{"id":432},"_5-launch-the-development-server","5. Launch the Development Server",[228,435,436,437,325],{},"Run the application directly using ",[287,438,439],{},"go run",[279,441,443],{"className":281,"code":442,"filename":283,"language":284,"meta":285,"style":285},"cd backend\ngo run .\u002Fcmd\u002Fserver\u002Fmain.go\n",[287,444,445,451],{"__ignoreMap":285},[290,446,447,449],{"class":292,"line":293},[290,448,311],{"class":310},[290,450,415],{"class":300},[290,452,453,455,458],{"class":292,"line":307},[290,454,420],{"class":296},[290,456,457],{"class":300}," run",[290,459,460],{"class":300}," .\u002Fcmd\u002Fserver\u002Fmain.go\n",[228,462,463,464,467],{},"Open ",[246,465,351],{"href":351,"rel":466},[250]," in your web browser.",[469,470,471],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":285,"searchDepth":307,"depth":307,"links":473},[474,475],{"id":237,"depth":307,"text":238},{"id":265,"depth":307,"text":266,"children":476},[477,479,480,481,482],{"id":273,"depth":478,"text":274},3,{"id":317,"depth":478,"text":318},{"id":359,"depth":478,"text":360},{"id":399,"depth":478,"text":400},{"id":432,"depth":478,"text":433},"Setting up a local development environment, running tests, and compiling the project.","md",null,{},{"icon":192},{"title":489,"description":490},"Local Development Guide - GO Shortener","Instructions for cloning, running tests, and executing GO Shortener locally using Go 1.22+.","Y-L0v3-ebM-CIi6rB0k1iR_baQK3RjdU8DFT0iBFKq4",[493,495],{"title":184,"path":185,"stem":186,"description":494,"icon":187,"children":-1},"SQLite engine configuration, WAL mode, schema design, and table definitions.",{"title":194,"path":195,"stem":196,"description":496,"icon":197,"children":-1},"Multi-architecture cross-compilation and automated GitHub Actions release pipelines.",1788462428852]