[{"data":1,"prerenderedAt":1666},["ShallowReactive",2],{"post-\u002Fposts\u002Fhow-to-add-fathom-analytics-to-nuxt":3,"post-author-garywoodfine":1279,"post-aside-video-none":6,"\u002Fposts\u002Fhow-to-add-fathom-analytics-to-nuxt-surround":1288,"navigation":1294,"content-section-services":1342,"content-section-products":1345,"content-section-company":1348,"legal-link":1350,"authors":1366,"author-garywoodfine":1395,"post-aside-related-candidates":1396},{"id":4,"title":5,"aside":6,"author":7,"body":8,"category":1259,"date":1260,"description":1261,"extension":1262,"featureImage":1263,"meta":1265,"navigation":93,"path":1267,"seo":1268,"sitemap":1269,"slug":6,"stem":1277,"subtitle":1261,"summary":1261,"tags":6,"updated":6,"video":6,"__hash__":1278},"posts\u002Fposts\u002Fhow-to-add-fathom-analytics-to-nuxt.md","How to add Fathom Analytics to Nuxt",null,"garywoodfine",{"type":9,"value":10,"toc":1249},"minimark",[11,15,18,21,26,36,48,52,66,71,74,115,121,194,200,282,288,301,305,315,318,335,339,347,361,367,385,388,391,574,578,581,584,587,591,594,601,620,626,673,676,880,884,887,892,897,1063,1073,1225,1228,1232,1238,1241,1245],[12,13,14],"p",{},"In the information & digital age, businesses often to strive to gain access to extensive information about their\ncustomers. This data may be used to personalise offerings and reach consumers in a way that reflects their\nindividuality. Advances in data analytics make it easier to combine information, such as preferences, shopping\npatterns, and sensitivity to price into useful templates for suggesting products. At face value this at first appears\nlike a win-win for marketers, who can identify those who are most likely to want their products, and end users, who\nreceive communications tailored specifically to them.",[12,16,17],{},"Privacy, however, is a major issue when it comes to using customer data. As more people share information online and\nbreaches become more common, the importance of protecting individuals’ identities has grown. Despite trying to preserve\nthe privacy of their customers, companies sometimes run into major problems.",[12,19,20],{},"In his book Mindf*ck: Inside Cambridge Analytica's Plot to Break the World, Christopher Wylie details illuminating and\noften scary detail how Cambridge Analytica exploited the data to create Facebook pages that would needle\n\"neurotic, conspiratorial citizens\", propagating an outraged solidarity.'",[22,23,25],"h3",{"id":24},"what-is-fathom-analytics","What is Fathom Analytics",[12,27,28,35],{},[29,30,34],"a",{"href":31,"rel":32},"https:\u002F\u002Fusefathom.com\u002Fref\u002FJCGMAJ",[33],"nofollow","Fathom Analytics"," is a privacy-focused platform for providing analytics for how your website is performing. It's an\nextremely powerful yet simple analytics platform, which also helps to reduce the level of online tracking for your\nusers on your site.",[12,37,38,39,43,44,47],{},"Checkout ",[29,40,42],{"href":41},"\u002Fposts\u002Fwhy-choose-privacy-focused-analytics","Why choose privacy focused Analytics"," where I discuss more\nabout ",[29,45,34],{"href":31,"rel":46},[33]," and why I choose Fathom Analytics for all my analytics and\nwhy I think its important all new bloggers should do the same.",[22,49,51],{"id":50},"how-to-add-fathom-analytics-with-nuxt-fathom-module","How to add Fathom Analytics with Nuxt-Fathom Module",[12,53,54,55,58,59,65],{},"We have drastically simplified the process of integrating ",[29,56,34],{"href":31,"rel":57},[33]," to your Nuxt 4 website or app, making use of our ",[29,60,64],{"href":61,"rel":62,"title":63},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@threenine\u002Fnuxt-fathom",[33],"threenine.io Nuxt Fathom module","@threenine\u002Fnuxt-fathom",".",[67,68],"github-code",{"account":69,"repo":70},"threenine","nuxt-fathom",[12,72,73],{},"The process is as simple as executing the following shell command in your nuxt project. Which is the typical approach for adding nuxt modules",[75,76,83],"pre",{"className":77,"code":78,"filename":79,"language":80,"meta":81,"style":82},"language-shell shiki shiki-themes material-theme-lighter monokai monokai monokai","\nnpx nuxi module add @threenine\u002Fnuxt-fathom\n\n","Terminal","shell","{ meta-info=val","",[84,85,86,95],"code",{"__ignoreMap":82},[87,88,91],"span",{"class":89,"line":90},"line",1,[87,92,94],{"emptyLinePlaceholder":93},true,"\n",[87,96,98,102,106,109,112],{"class":89,"line":97},2,[87,99,101],{"class":100},"sC-bC","npx",[87,103,105],{"class":104},"sKdu0"," nuxi",[87,107,108],{"class":104}," module",[87,110,111],{"class":104}," add",[87,113,114],{"class":104}," @threenine\u002Fnuxt-fathom\n",[12,116,117,118],{},"This line will automatically install the package and import the module in your ",[84,119,120],{},"nuxt.config",[75,122,128],{"className":123,"code":124,"filename":125,"language":126,"meta":127,"style":82},"language-typescript shiki shiki-themes material-theme-lighter monokai monokai monokai","\nexport default defineNuxtConfig({\n  modules: [\"@threenine\u002Fnuxt-fathom\"],\n});\n\n","nuxt.config.ts","typescript","meta-info=val",[84,129,130,134,155,182],{"__ignoreMap":82},[87,131,132],{"class":89,"line":90},[87,133,94],{"emptyLinePlaceholder":93},[87,135,136,140,143,147,151],{"class":89,"line":97},[87,137,139],{"class":138},"s7SBB","export",[87,141,142],{"class":138}," default",[87,144,146],{"class":145},"s_vVk"," defineNuxtConfig",[87,148,150],{"class":149},"sRVMn","(",[87,152,154],{"class":153},"s8B1f","{\n",[87,156,158,162,165,168,172,174,176,179],{"class":89,"line":157},3,[87,159,161],{"class":160},"sB8Ws","  modules",[87,163,164],{"class":153},":",[87,166,167],{"class":149}," [",[87,169,171],{"class":170},"sxJtY","\"",[87,173,64],{"class":104},[87,175,171],{"class":170},[87,177,178],{"class":149},"]",[87,180,181],{"class":153},",\n",[87,183,185,188,191],{"class":89,"line":184},4,[87,186,187],{"class":153},"}",[87,189,190],{"class":149},")",[87,192,193],{"class":153},";\n",[12,195,196,197,199],{},"Once the module has been added all you now need to do is configure your ",[84,198,125],{}," to enable automatic tracking.",[75,201,203],{"className":123,"code":202,"filename":125,"language":126,"meta":127,"style":82},"\nexport default defineNuxtConfig({\n  modules: [\"@threenine\u002Fnuxt-fathom\"],\n  fathom: {\n    siteId: \"FATHOM_SITE_ID\",\n  },\n});\n\n",[84,204,205,209,221,239,249,267,273],{"__ignoreMap":82},[87,206,207],{"class":89,"line":90},[87,208,94],{"emptyLinePlaceholder":93},[87,210,211,213,215,217,219],{"class":89,"line":97},[87,212,139],{"class":138},[87,214,142],{"class":138},[87,216,146],{"class":145},[87,218,150],{"class":149},[87,220,154],{"class":153},[87,222,223,225,227,229,231,233,235,237],{"class":89,"line":157},[87,224,161],{"class":160},[87,226,164],{"class":153},[87,228,167],{"class":149},[87,230,171],{"class":170},[87,232,64],{"class":104},[87,234,171],{"class":170},[87,236,178],{"class":149},[87,238,181],{"class":153},[87,240,241,244,246],{"class":89,"line":184},[87,242,243],{"class":160},"  fathom",[87,245,164],{"class":153},[87,247,248],{"class":153}," {\n",[87,250,252,255,257,260,263,265],{"class":89,"line":251},5,[87,253,254],{"class":160},"    siteId",[87,256,164],{"class":153},[87,258,259],{"class":170}," \"",[87,261,262],{"class":104},"FATHOM_SITE_ID",[87,264,171],{"class":170},[87,266,181],{"class":153},[87,268,270],{"class":89,"line":269},6,[87,271,272],{"class":153},"  },\n",[87,274,276,278,280],{"class":89,"line":275},7,[87,277,187],{"class":153},[87,279,190],{"class":149},[87,281,193],{"class":153},[12,283,284,285,287],{},"Replace ",[84,286,262],{}," with the Site ID of your site from the Fathom Analytics sites.",[289,290,291],"content-note",{},[292,293,294],"template",{"v-slot:message":82},[12,295,296,297,300],{},"A Fathom Account is required to use this module, sign up for ",[29,298,34],{"href":31,"rel":299},[33]," account",[22,302,304],{"id":303},"adding-fathom-analytics-to-nuxt-3","Adding Fathom Analytics to Nuxt 3",[12,306,307,308,311,312,65],{},"The first step to adding Fathom Analytics to our Nuxt 3 app, we first have to install an additional module to our app,\nthe vue-fathom. The UBC Launch Pad, the developers of the plugin are customers of ",[29,309,34],{"href":31,"rel":310},[33]," and despite this\nbeing an unofficial plugin it is also recommended by ",[29,313,34],{"href":31,"rel":314},[33],[12,316,317],{},"Add vue-fathom to your site using your preferred package manager. In my case I will make use of Yarn using the\nfollowing command in my terminal window.",[75,319,323],{"className":320,"code":321,"filename":79,"language":322,"meta":127,"style":82},"language-bash shiki shiki-themes material-theme-lighter monokai monokai monokai"," yarn add @ubclaunchpad\u002Fvue-fathom\n","bash",[84,324,325],{"__ignoreMap":82},[87,326,327,330,332],{"class":89,"line":90},[87,328,329],{"class":100}," yarn",[87,331,111],{"class":104},[87,333,334],{"class":104}," @ubclaunchpad\u002Fvue-fathom\n",[22,336,338],{"id":337},"create-a-nuxt-3-plugin","Create a Nuxt 3 Plugin",[12,340,341,342,346],{},"In the next step, we need to develop a simple plugin. We will make use of the nuxi, which I discussed in detail in\n",[29,343,345],{"href":344},"\u002Fposts\u002Fgetting-started-with-nuxt","Getting started with Nuxt 3",", to generate the stub file four us.",[12,348,349,350,353,354,357,358,360],{},"Its important to remember that when defining which plugins are for use on the server or the client by add a suffix of\n",[84,351,352],{},".server"," or ",[84,355,356],{},".client"," to the filename. These are then auto-registered in the nuxt application, and you no longer\nneed to define them in the ",[84,359,120],{}," file like you had to in previous versions of Nuxt.",[12,362,363,364],{},"We'll use nuxi to create a basic plugin stub for us, in my case I am going to name my plugin ",[84,365,366],{},"fathom.client",[75,368,370],{"className":320,"code":369,"filename":79,"language":322,"meta":127,"style":82},"nuxi add plugin fathom.client\n",[84,371,372],{"__ignoreMap":82},[87,373,374,377,379,382],{"class":89,"line":90},[87,375,376],{"class":100},"nuxi",[87,378,111],{"class":104},[87,380,381],{"class":104}," plugin",[87,383,384],{"class":104}," fathom.client\n",[12,386,387],{},"This command will generate create, if it doesn't exist already, a plugin folder with a stub Typescript file for us to\nstart developing our plugin with.",[12,389,390],{},"We edit the code in this file and simply add the following code",[75,392,395],{"className":123,"code":393,"filename":394,"language":126,"meta":127,"style":82},"import { defineNuxtPlugin } from \"#app\";\nimport VueFathom from \"@ubclaunchpad\u002Fvue-fathom\";\nexport default defineNuxtPlugin((nuxtApp) => {\n    nuxtApp.vueApp.use(VueFathom, {\n        siteID: \"\u003Cadd your site id here>\",\n        settings: {\n            url: \"https:\u002F\u002Fcdn.usefathom.com\u002Fscript.js\",\n            spa: \"history\",\n        },\n    });\n});\n","fathom.client.ts",[84,396,397,423,442,466,491,507,516,532,549,555,565],{"__ignoreMap":82},[87,398,399,402,405,408,411,414,416,419,421],{"class":89,"line":90},[87,400,401],{"class":138},"import",[87,403,404],{"class":153}," {",[87,406,407],{"class":149}," defineNuxtPlugin",[87,409,410],{"class":153}," }",[87,412,413],{"class":138}," from",[87,415,259],{"class":170},[87,417,418],{"class":104},"#app",[87,420,171],{"class":170},[87,422,193],{"class":153},[87,424,425,427,430,433,435,438,440],{"class":89,"line":97},[87,426,401],{"class":138},[87,428,429],{"class":149}," VueFathom ",[87,431,432],{"class":138},"from",[87,434,259],{"class":170},[87,436,437],{"class":104},"@ubclaunchpad\u002Fvue-fathom",[87,439,171],{"class":170},[87,441,193],{"class":153},[87,443,444,446,448,450,452,454,458,460,464],{"class":89,"line":157},[87,445,139],{"class":138},[87,447,142],{"class":138},[87,449,407],{"class":145},[87,451,150],{"class":149},[87,453,150],{"class":153},[87,455,457],{"class":456},"std-y","nuxtApp",[87,459,190],{"class":153},[87,461,463],{"class":462},"sI02Y"," =>",[87,465,248],{"class":153},[87,467,468,471,473,476,478,481,483,486,489],{"class":89,"line":184},[87,469,470],{"class":149},"    nuxtApp",[87,472,65],{"class":153},[87,474,475],{"class":149},"vueApp",[87,477,65],{"class":153},[87,479,480],{"class":145},"use",[87,482,150],{"class":160},[87,484,485],{"class":149},"VueFathom",[87,487,488],{"class":153},",",[87,490,248],{"class":153},[87,492,493,496,498,500,503,505],{"class":89,"line":251},[87,494,495],{"class":160},"        siteID",[87,497,164],{"class":153},[87,499,259],{"class":170},[87,501,502],{"class":104},"\u003Cadd your site id here>",[87,504,171],{"class":170},[87,506,181],{"class":153},[87,508,509,512,514],{"class":89,"line":269},[87,510,511],{"class":160},"        settings",[87,513,164],{"class":153},[87,515,248],{"class":153},[87,517,518,521,523,525,528,530],{"class":89,"line":275},[87,519,520],{"class":160},"            url",[87,522,164],{"class":153},[87,524,259],{"class":170},[87,526,527],{"class":104},"https:\u002F\u002Fcdn.usefathom.com\u002Fscript.js",[87,529,171],{"class":170},[87,531,181],{"class":153},[87,533,535,538,540,542,545,547],{"class":89,"line":534},8,[87,536,537],{"class":160},"            spa",[87,539,164],{"class":153},[87,541,259],{"class":170},[87,543,544],{"class":104},"history",[87,546,171],{"class":170},[87,548,181],{"class":153},[87,550,552],{"class":89,"line":551},9,[87,553,554],{"class":153},"        },\n",[87,556,558,561,563],{"class":89,"line":557},10,[87,559,560],{"class":153},"    }",[87,562,190],{"class":160},[87,564,193],{"class":153},[87,566,568,570,572],{"class":89,"line":567},11,[87,569,187],{"class":153},[87,571,190],{"class":149},[87,573,193],{"class":153},[22,575,577],{"id":576},"getting-your-plugin-ready-for-production","Getting your plugin ready for production",[12,579,580],{},"The above code would work fine however, there are a few issues with the the code that we will need to tidy before we\ncan even think about a commit to our Source Code repository or even deploying to the site.",[12,582,583],{},"The first thing we need to bear in mind is that we don't really want to be including or analytics Id to our Github\nrepo. Its not because this is sensitive information or anything because at the end of the day anybody would be able to\nretrieve your analytics ID just by viewing source on your website. However, as a rule we really don't want to be adding\nID etc. in our code.",[12,585,586],{},"Another point to remember is that potentially you could be on a team of developers and they may be running the\napplication a lot and testing it etc. during the course of development and you really don't want to cluttering up\nyour analytics data with test and dev visits.",[22,588,590],{"id":589},"upload-your-fathom-analytics-id-key-store","Upload your Fathom Analytics ID Key Store",[12,592,593],{},"The first step is to save your Fathom Analytics ID to central place so that your can retrieve it when the your site is\ndeployed. Typically you may use something like Azure Key Vault or AWS Secrets or as in my case I am making use of\nNetlify and will be making use of Netlify Environments variable.",[12,595,596,597,600],{},"I have the Netlify ClI, which I have done so making use of Homebrew on Linux, so will create a key with the name\n",[84,598,599],{},"FATHOM_ANALYTICS_ID"," and add my site ID to it using the following CLI command.",[75,602,604],{"className":320,"code":603,"filename":79,"language":322,"meta":127,"style":82},"netlify env:set fathom_analytics_id someValue\n",[84,605,606],{"__ignoreMap":82},[87,607,608,611,614,617],{"class":89,"line":90},[87,609,610],{"class":100},"netlify",[87,612,613],{"class":104}," env:set",[87,615,616],{"class":104}," fathom_analytics_id",[87,618,619],{"class":104}," someValue\n",[12,621,622,623,625],{},"We an update our ",[84,624,125],{}," file to add the following code to add our environment variable value the available\npublic configuration values. Check out runtimeConfig for an explanation. We add to the public section because we\nactually want to expose our variable value to the front-end application.",[75,627,631],{"className":628,"code":629,"filename":125,"language":630,"meta":127,"style":82},"language-json shiki shiki-themes material-theme-lighter monokai monokai monokai","runtimeConfig: {\n        public: {\n            fathom_analytics_id: process.env.fathom_analytics_id,\n        }\n    },\n","json",[84,632,633,640,650,662,667],{"__ignoreMap":82},[87,634,635,638],{"class":89,"line":90},[87,636,637],{"class":149},"runtimeConfig: ",[87,639,154],{"class":153},[87,641,642,646,648],{"class":89,"line":97},[87,643,645],{"class":644},"sbgAB","        public",[87,647,164],{"class":153},[87,649,248],{"class":153},[87,651,652,655,657,660],{"class":89,"line":157},[87,653,654],{"class":644},"            fathom_analytics_id",[87,656,164],{"class":153},[87,658,659],{"class":644}," process.env.fathom_analytics_id",[87,661,181],{"class":153},[87,663,664],{"class":89,"line":184},[87,665,666],{"class":153},"        }\n",[87,668,669,671],{"class":89,"line":251},[87,670,560],{"class":153},[87,672,181],{"class":149},[12,674,675],{},"With this in place we just want to update our plugin code a little.",[75,677,679],{"className":123,"code":678,"filename":394,"language":126,"meta":127,"style":82},"\nimport { defineNuxtPlugin } from \"#app\";\nimport VueFathom from \"@ubclaunchpad\u002Fvue-fathom\";\nexport default defineNuxtPlugin((nuxtApp) => {\n    const config = useRuntimeConfig();\n    nuxtApp.vueApp.use(VueFathom, {\n        siteID: config.public.fathom_analytics_id,\n        settings: {\n            url: \"https:\u002F\u002Fcdn.usefathom.com\u002Fscript.js\",\n            spa: \"history\",\n            excludedDomains: [\"localhost\"],\n        },\n    });\n});\n",[84,680,681,685,705,721,741,761,781,801,809,823,837,857,862,871],{"__ignoreMap":82},[87,682,683],{"class":89,"line":90},[87,684,94],{"emptyLinePlaceholder":93},[87,686,687,689,691,693,695,697,699,701,703],{"class":89,"line":97},[87,688,401],{"class":138},[87,690,404],{"class":153},[87,692,407],{"class":149},[87,694,410],{"class":153},[87,696,413],{"class":138},[87,698,259],{"class":170},[87,700,418],{"class":104},[87,702,171],{"class":170},[87,704,193],{"class":153},[87,706,707,709,711,713,715,717,719],{"class":89,"line":157},[87,708,401],{"class":138},[87,710,429],{"class":149},[87,712,432],{"class":138},[87,714,259],{"class":170},[87,716,437],{"class":104},[87,718,171],{"class":170},[87,720,193],{"class":153},[87,722,723,725,727,729,731,733,735,737,739],{"class":89,"line":184},[87,724,139],{"class":138},[87,726,142],{"class":138},[87,728,407],{"class":145},[87,730,150],{"class":149},[87,732,150],{"class":153},[87,734,457],{"class":456},[87,736,190],{"class":153},[87,738,463],{"class":462},[87,740,248],{"class":153},[87,742,743,746,749,753,756,759],{"class":89,"line":251},[87,744,745],{"class":462},"    const",[87,747,748],{"class":149}," config",[87,750,752],{"class":751},"sb10O"," =",[87,754,755],{"class":145}," useRuntimeConfig",[87,757,758],{"class":160},"()",[87,760,193],{"class":153},[87,762,763,765,767,769,771,773,775,777,779],{"class":89,"line":269},[87,764,470],{"class":149},[87,766,65],{"class":153},[87,768,475],{"class":149},[87,770,65],{"class":153},[87,772,480],{"class":145},[87,774,150],{"class":160},[87,776,485],{"class":149},[87,778,488],{"class":153},[87,780,248],{"class":153},[87,782,783,785,787,789,791,794,796,799],{"class":89,"line":275},[87,784,495],{"class":160},[87,786,164],{"class":153},[87,788,748],{"class":149},[87,790,65],{"class":153},[87,792,793],{"class":149},"public",[87,795,65],{"class":153},[87,797,798],{"class":149},"fathom_analytics_id",[87,800,181],{"class":153},[87,802,803,805,807],{"class":89,"line":534},[87,804,511],{"class":160},[87,806,164],{"class":153},[87,808,248],{"class":153},[87,810,811,813,815,817,819,821],{"class":89,"line":551},[87,812,520],{"class":160},[87,814,164],{"class":153},[87,816,259],{"class":170},[87,818,527],{"class":104},[87,820,171],{"class":170},[87,822,181],{"class":153},[87,824,825,827,829,831,833,835],{"class":89,"line":557},[87,826,537],{"class":160},[87,828,164],{"class":153},[87,830,259],{"class":170},[87,832,544],{"class":104},[87,834,171],{"class":170},[87,836,181],{"class":153},[87,838,839,842,844,846,848,851,853,855],{"class":89,"line":567},[87,840,841],{"class":160},"            excludedDomains",[87,843,164],{"class":153},[87,845,167],{"class":160},[87,847,171],{"class":170},[87,849,850],{"class":104},"localhost",[87,852,171],{"class":170},[87,854,178],{"class":160},[87,856,181],{"class":153},[87,858,860],{"class":89,"line":859},12,[87,861,554],{"class":153},[87,863,865,867,869],{"class":89,"line":864},13,[87,866,560],{"class":153},[87,868,190],{"class":160},[87,870,193],{"class":153},[87,872,874,876,878],{"class":89,"line":873},14,[87,875,187],{"class":153},[87,877,190],{"class":149},[87,879,193],{"class":153},[22,881,883],{"id":882},"alternative-approaches","Alternative approaches",[12,885,886],{},"If creating a plugin to add the tracker to your site is too much faff and you can't be bothered, there is a simpler\napproach to adding the Fathom script to your site.",[888,889,891],"h4",{"id":890},"add-configuration-to-nuxt-configuration","Add Configuration to Nuxt Configuration",[12,893,894,895],{},"To do so you can simply add the following to your ",[84,896,125],{},[75,898,900],{"className":123,"code":899,"filename":125,"language":126,"meta":127,"style":82},"export default {\n   head: {\n    script: [\n      {\n        hid: 'fathom', \u002F\u002F unique identifier\n        src:  process.env.fathom_analytics_id,\n        site: 'https:\u002F\u002Fcdn.usefathom.com\u002Fscript.js',\n        spa: 'auto', \u002F\u002F set by fathom\n        defer: 'defer',\n        once: true, \u002F\u002F only load once on SSR\n      }\n    ]\n  }\n}\n",[84,901,902,910,919,929,934,956,977,992,1011,1027,1043,1048,1053,1058],{"__ignoreMap":82},[87,903,904,906,908],{"class":89,"line":90},[87,905,139],{"class":138},[87,907,142],{"class":138},[87,909,248],{"class":153},[87,911,912,915,917],{"class":89,"line":97},[87,913,914],{"class":160},"   head",[87,916,164],{"class":153},[87,918,248],{"class":153},[87,920,921,924,926],{"class":89,"line":157},[87,922,923],{"class":160},"    script",[87,925,164],{"class":153},[87,927,928],{"class":149}," [\n",[87,930,931],{"class":89,"line":184},[87,932,933],{"class":153},"      {\n",[87,935,936,939,941,944,947,950,952],{"class":89,"line":251},[87,937,938],{"class":160},"        hid",[87,940,164],{"class":153},[87,942,943],{"class":170}," '",[87,945,946],{"class":104},"fathom",[87,948,949],{"class":170},"'",[87,951,488],{"class":153},[87,953,955],{"class":954},"sw-b4"," \u002F\u002F unique identifier\n",[87,957,958,961,963,966,968,971,973,975],{"class":89,"line":269},[87,959,960],{"class":160},"        src",[87,962,164],{"class":153},[87,964,965],{"class":149},"  process",[87,967,65],{"class":153},[87,969,970],{"class":149},"env",[87,972,65],{"class":153},[87,974,798],{"class":149},[87,976,181],{"class":153},[87,978,979,982,984,986,988,990],{"class":89,"line":275},[87,980,981],{"class":160},"        site",[87,983,164],{"class":153},[87,985,943],{"class":170},[87,987,527],{"class":104},[87,989,949],{"class":170},[87,991,181],{"class":153},[87,993,994,997,999,1001,1004,1006,1008],{"class":89,"line":534},[87,995,996],{"class":160},"        spa",[87,998,164],{"class":153},[87,1000,943],{"class":170},[87,1002,1003],{"class":104},"auto",[87,1005,949],{"class":170},[87,1007,488],{"class":153},[87,1009,1010],{"class":954}," \u002F\u002F set by fathom\n",[87,1012,1013,1016,1018,1020,1023,1025],{"class":89,"line":551},[87,1014,1015],{"class":160},"        defer",[87,1017,164],{"class":153},[87,1019,943],{"class":170},[87,1021,1022],{"class":104},"defer",[87,1024,949],{"class":170},[87,1026,181],{"class":153},[87,1028,1029,1032,1034,1038,1040],{"class":89,"line":557},[87,1030,1031],{"class":160},"        once",[87,1033,164],{"class":153},[87,1035,1037],{"class":1036},"scY0H"," true",[87,1039,488],{"class":153},[87,1041,1042],{"class":954}," \u002F\u002F only load once on SSR\n",[87,1044,1045],{"class":89,"line":567},[87,1046,1047],{"class":153},"      }\n",[87,1049,1050],{"class":89,"line":859},[87,1051,1052],{"class":149},"    ]\n",[87,1054,1055],{"class":89,"line":864},[87,1056,1057],{"class":153},"  }\n",[87,1059,1060],{"class":89,"line":873},[87,1061,1062],{"class":153},"}\n",[12,1064,1065,1066,1069,1070,1072],{},"We can add the Fathom Analytics code to all pages in our application by adding the configuration to our ",[84,1067,1068],{},"app.vue",".\nThe ",[84,1071,1068],{}," file is the main component in your Nuxt 3 applications. We can make use of the useHead a component to\nbind meta data to the head of the page.",[75,1074,1076],{"className":123,"code":1075,"filename":1068,"language":126,"meta":127,"style":82},"const config = useRuntimeConfig();\nuseHead({\n   script: [\n     {\n        hid: 'fathom', \u002F\u002F unique identifier\n        src:  config.public.fathom_analytics_id,\n        site: 'https:\u002F\u002Fcdn.usefathom.com\u002Fscript.js',\n        spa: 'auto', \u002F\u002F set by fathom\n        defer: 'defer',\n        once: true, \u002F\u002F only load once on SSR\n      }\n  ]\n})\n",[84,1077,1078,1095,1104,1113,1118,1134,1153,1167,1183,1197,1209,1213,1218],{"__ignoreMap":82},[87,1079,1080,1083,1086,1089,1091,1093],{"class":89,"line":90},[87,1081,1082],{"class":462},"const",[87,1084,1085],{"class":149}," config ",[87,1087,1088],{"class":751},"=",[87,1090,755],{"class":145},[87,1092,758],{"class":149},[87,1094,193],{"class":153},[87,1096,1097,1100,1102],{"class":89,"line":97},[87,1098,1099],{"class":145},"useHead",[87,1101,150],{"class":149},[87,1103,154],{"class":153},[87,1105,1106,1109,1111],{"class":89,"line":157},[87,1107,1108],{"class":160},"   script",[87,1110,164],{"class":153},[87,1112,928],{"class":149},[87,1114,1115],{"class":89,"line":184},[87,1116,1117],{"class":153},"     {\n",[87,1119,1120,1122,1124,1126,1128,1130,1132],{"class":89,"line":251},[87,1121,938],{"class":160},[87,1123,164],{"class":153},[87,1125,943],{"class":170},[87,1127,946],{"class":104},[87,1129,949],{"class":170},[87,1131,488],{"class":153},[87,1133,955],{"class":954},[87,1135,1136,1138,1140,1143,1145,1147,1149,1151],{"class":89,"line":269},[87,1137,960],{"class":160},[87,1139,164],{"class":153},[87,1141,1142],{"class":149},"  config",[87,1144,65],{"class":153},[87,1146,793],{"class":149},[87,1148,65],{"class":153},[87,1150,798],{"class":149},[87,1152,181],{"class":153},[87,1154,1155,1157,1159,1161,1163,1165],{"class":89,"line":275},[87,1156,981],{"class":160},[87,1158,164],{"class":153},[87,1160,943],{"class":170},[87,1162,527],{"class":104},[87,1164,949],{"class":170},[87,1166,181],{"class":153},[87,1168,1169,1171,1173,1175,1177,1179,1181],{"class":89,"line":534},[87,1170,996],{"class":160},[87,1172,164],{"class":153},[87,1174,943],{"class":170},[87,1176,1003],{"class":104},[87,1178,949],{"class":170},[87,1180,488],{"class":153},[87,1182,1010],{"class":954},[87,1184,1185,1187,1189,1191,1193,1195],{"class":89,"line":551},[87,1186,1015],{"class":160},[87,1188,164],{"class":153},[87,1190,943],{"class":170},[87,1192,1022],{"class":104},[87,1194,949],{"class":170},[87,1196,181],{"class":153},[87,1198,1199,1201,1203,1205,1207],{"class":89,"line":557},[87,1200,1031],{"class":160},[87,1202,164],{"class":153},[87,1204,1037],{"class":1036},[87,1206,488],{"class":153},[87,1208,1042],{"class":954},[87,1210,1211],{"class":89,"line":567},[87,1212,1047],{"class":153},[87,1214,1215],{"class":89,"line":859},[87,1216,1217],{"class":149},"  ]\n",[87,1219,1220,1222],{"class":89,"line":864},[87,1221,187],{"class":153},[87,1223,1224],{"class":149},")\n",[12,1226,1227],{},"Irrespective of the approach you take to add the script to your website. The result should be visible when you inspect\nthe code on your deployed website as follows.",[22,1229,1231],{"id":1230},"conclusion","Conclusion",[12,1233,1234,1237],{},[29,1235,34],{"href":31,"rel":1236},[33],"  is a privacy focused Web Analytics, that provides easy-yet-powerful website analytics that protects\ndigital privacy. Fathom is built to protect user privacy and comply with privacy laws out of the box. This is one of\nthe main reasons you should consider Fathom an amazing Google Analytics alternative. This all means that Fathom analytics\nis the best privacy-focused web analytics software out there. Data ownership for your website analytics.",[12,1239,1240],{},"Fathom collects trends and insights, not personal details about specific website visitors, providing you top pages,\ntop referrers, bounce rate and average time people spend on your site. That’s it!",[1242,1243],"content-image",{"image":1244,"link":31,"title":34},"blog\u002Faff03_ovsfde",[1246,1247,1248],"style",{},"html pre.shiki code .sC-bC, html code.shiki .sC-bC{--shiki-light:#E2931D;--shiki-default:#A6E22E;--shiki-dark:#A6E22E;--shiki-sepia:#A6E22E}html pre.shiki code .sKdu0, html code.shiki .sKdu0{--shiki-light:#91B859;--shiki-default:#E6DB74;--shiki-dark:#E6DB74;--shiki-sepia:#E6DB74}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 .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .s7SBB, html code.shiki .s7SBB{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#F92672;--shiki-default-font-style:inherit;--shiki-dark:#F92672;--shiki-dark-font-style:inherit;--shiki-sepia:#F92672;--shiki-sepia-font-style:inherit}html pre.shiki code .s_vVk, html code.shiki .s_vVk{--shiki-light:#6182B8;--shiki-default:#A6E22E;--shiki-dark:#A6E22E;--shiki-sepia:#A6E22E}html pre.shiki code .sRVMn, html code.shiki .sRVMn{--shiki-light:#90A4AE;--shiki-default:#F8F8F2;--shiki-dark:#F8F8F2;--shiki-sepia:#F8F8F2}html pre.shiki code .s8B1f, html code.shiki .s8B1f{--shiki-light:#39ADB5;--shiki-default:#F8F8F2;--shiki-dark:#F8F8F2;--shiki-sepia:#F8F8F2}html pre.shiki code .sB8Ws, html code.shiki .sB8Ws{--shiki-light:#E53935;--shiki-default:#F8F8F2;--shiki-dark:#F8F8F2;--shiki-sepia:#F8F8F2}html pre.shiki code .sxJtY, html code.shiki .sxJtY{--shiki-light:#39ADB5;--shiki-default:#E6DB74;--shiki-dark:#E6DB74;--shiki-sepia:#E6DB74}html pre.shiki code .std-y, html code.shiki .std-y{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#FD971F;--shiki-default-font-style:italic;--shiki-dark:#FD971F;--shiki-dark-font-style:italic;--shiki-sepia:#FD971F;--shiki-sepia-font-style:italic}html pre.shiki code .sI02Y, html code.shiki .sI02Y{--shiki-light:#9C3EDA;--shiki-light-font-style:inherit;--shiki-default:#66D9EF;--shiki-default-font-style:italic;--shiki-dark:#66D9EF;--shiki-dark-font-style:italic;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sbgAB, html code.shiki .sbgAB{--shiki-light:#90A4AE;--shiki-default:#F44747;--shiki-dark:#F44747;--shiki-sepia:#F44747}html pre.shiki code .sb10O, html code.shiki .sb10O{--shiki-light:#39ADB5;--shiki-default:#F92672;--shiki-dark:#F92672;--shiki-sepia:#F92672}html pre.shiki code .sw-b4, html code.shiki .sw-b4{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#88846F;--shiki-default-font-style:inherit;--shiki-dark:#88846F;--shiki-dark-font-style:inherit;--shiki-sepia:#88846F;--shiki-sepia-font-style:inherit}html pre.shiki code .scY0H, html code.shiki .scY0H{--shiki-light:#FF5370;--shiki-default:#AE81FF;--shiki-dark:#AE81FF;--shiki-sepia:#AE81FF}",{"title":82,"searchDepth":97,"depth":97,"links":1250},[1251,1252,1253,1254,1255,1256,1257,1258],{"id":24,"depth":157,"text":25},{"id":50,"depth":157,"text":51},{"id":303,"depth":157,"text":304},{"id":337,"depth":157,"text":338},{"id":576,"depth":157,"text":577},{"id":589,"depth":157,"text":590},{"id":882,"depth":157,"text":883},{"id":1230,"depth":157,"text":1231},"privacy","2024-07-01","Adding privacy focused analytics to your nuxt based website","md",{"url":1264,"title":5},"v1690313878\u002Fnuxt-header_tbc9cp",{"publishDateTime":1266},"2024-07-01:17:30","\u002Fposts\u002Fhow-to-add-fathom-analytics-to-nuxt",{"title":5,"description":1261},{"loc":1267,"lastmod":1260,"changefreq":1270,"priority":1271,"images":1272},"monthly",0.8,[1273,1275],{"loc":1274},"https:\u002F\u002Fres.cloudinary.com\u002Fthreenine-co-uk\u002Fimage\u002Fupload\u002Ff_jpg,w_1200\u002Fv1690313878\u002Fnuxt-header_tbc9cp",{"loc":1276},"https:\u002F\u002Fres.cloudinary.com\u002Fthreenine-co-uk\u002Fimage\u002Fupload\u002Ff_jpg,w_1200\u002Fblog\u002Faff03_ovsfde","posts\u002Fhow-to-add-fathom-analytics-to-nuxt","2BCwO-GZLhZPDth7MyKi7ybANkfd52JWUuyT4JbYvMc",{"name":1280,"to":1281,"avatar":1282,"sameAs":1283},"Gary Woodfine","https:\u002F\u002Fgarywoodfine.com","garywoodfine_tlccjw",[1284,1285,1286,1287],"https:\u002F\u002Fgithub.com\u002Fgarywoodfine","https:\u002F\u002Fwww.youtube.com\u002F@Threenineio","https:\u002F\u002Fnjump.me\u002Fnpub1a3jz7w9laar2k77dkkh2rhxunr9zpja5emrl5yrxetamt29swqyqmmt32y","nostr:npub1a3jz7w9laar2k77dkkh2rhxunr9zpja5emrl5yrxetamt29swqyqmmt32y",[6,1289],{"title":1290,"path":1291,"stem":1292,"description":1293,"children":-1},"The Importance of Privacy in Web Analytics","\u002Fposts\u002Fimportance-of-privacy-in-web-analytics","posts\u002Fimportance-of-privacy-in-web-analytics","Why all websites and apps need to be concerned about the privacy of their users",{"id":1295,"extension":1296,"items":1297,"meta":1339,"stem":1340,"__hash__":1341},"navigation\u002Fnavigation.yaml","yaml",[1298,1311,1324,1332],{"label":1299,"children":1300},"products",[1301,1306],{"label":1302,"icon":1303,"description":1304,"to":1305},"Diogel","material-symbols:preview","Keep your Nostr identity in your hands, in your browser, on your phone or on your own server.","\u002Fproducts\u002Fdiogel",{"label":1307,"icon":1308,"description":1309,"to":1310},"Nostrfi","i-lucide-radio-tower","Nostr relay, storage and backend-service infrastructure for builders and operators.","\u002Fproducts\u002Fnostrfi",{"label":1312,"children":1313},"services",[1314,1319],{"label":1315,"description":1316,"icon":1317,"to":1318},"Nostr product development","Focused engineering support for teams building Nostr-native products, tools and protocol-aware user experiences.","game-icons:ostrich","\u002Fservices\u002Fnostr-product-development",{"label":1320,"description":1321,"icon":1322,"to":1323},"Bitcoin product development","Engineering for Bitcoin payments, wallet-connected flows and products where users hold their own keys.","bx:bxl-bitcoin","\u002Fservices\u002Fbitcoin-product-development",{"label":1325,"children":1326},"company",[1327],{"label":1328,"icon":1329,"description":1330,"to":1331},"About","i-lucide-file-text","What we believe, what we build and how we work.","\u002Fcompany\u002Fabout",{"label":1333,"children":1334},"resources",[1335],{"label":1336,"icon":1329,"description":1337,"to":1338},"Blog","Practical Bitcoin, Nostr and product engineering guides.","https:\u002F\u002Fthreenine.blog",{},"navigation","n-Xc9COCwoCHJiMCeBNLauHtuhxcGol-wu9S2og3Rqs",[1343,1344],{"label":1315,"description":1316,"icon":1317,"to":1318},{"label":1320,"description":1321,"icon":1322,"to":1323},[1346,1347],{"label":1302,"icon":1303,"description":1304,"to":1305},{"label":1307,"icon":1308,"description":1309,"to":1310},[1349],{"label":1328,"icon":1329,"description":1330,"to":1331},[1351,1354,1357,1360,1363],{"path":1352,"title":1353},"\u002Flegals\u002Fcookie-policy","Cookie Policy",{"path":1355,"title":1356},"\u002Flegals\u002Fcopyright","Copyright",{"path":1358,"title":1359},"\u002Flegals\u002Fcustomer-support","Customer Support",{"path":1361,"title":1362},"\u002Flegals\u002Fprivacy-policy","Privacy Policy",{"path":1364,"title":1365},"\u002Flegals\u002Fterms-of-service","Terms of Service",{"id":1367,"title":1280,"avatar":1282,"body":1368,"description":1372,"extension":1262,"meta":1387,"name":1280,"navigation":93,"path":1388,"role":1389,"sameAs":1390,"seo":1391,"stem":1392,"summary":1393,"to":1281,"username":7,"__hash__":1394},"authors\u002Fauthors\u002FGary Woodfine.md",{"type":9,"value":1369,"toc":1385},[1370,1373,1376,1379,1382],[12,1371,1372],{},"Polyglot software engineer with extensive experience in software engineering, with a passion to build great scalable software to solve complex business problems. A track record in developing high-performance backend systems, optimizing architecture, and ensuring continuous availability of critical APIs.",[12,1374,1375],{},"I'm an independent software developer, vendor, architect, consultant, blogger, Bitcoin & Nostr Enthusiast. I've provided software development expertise and helped augment software development skills and teams for a number of startups, product companies, corporate IT shops, and consulting firms.",[12,1377,1378],{},"I started out in the software world back in 1995, building websites with HoTMetaL Pro & ASP and moved on to building web apps with .NET when it released in Beta in 2001, since then, I've shipped systems in just about every industry.",[12,1380,1381],{},"Along my journey, I have also shipped various platforms & products in a number of other programming languages or software development frameworks that have had their moments in the sun, but somehow I have always made way back to C# & .Net.",[12,1383,1384],{},"Over the years, I've strived to improve how I and my teams deliver value to the clients, customers, and end-users. That has led me down the path of exploring Agile, Domain-Driven Design, REST, messaging, distributed systems, and anything else I thought could help.",{"title":82,"searchDepth":97,"depth":97,"links":1386},[],{},"\u002Fauthors\u002Fgary-woodfine","Managing Director",[1284,1285,1286,1287],{"title":1280,"description":1372},"authors\u002FGary Woodfine","independent software developer, vendor, architect, consultant, blogger, Bitcoin & Nostr Enthusiast. I've provided software development expertise and helped augment software development skills and teams for a number of startups, product companies, corporate IT shops, and consulting firms.","30ZWJ-6T2g8S0kLLgUhZWA7_QFUOpa5CElif7tAhsLo",{"title":1280,"name":1280,"role":1389,"summary":1393,"avatar":1282,"username":7,"to":1281},[1397,1408,1419,1426,1433,1440,1451,1460,1466,1473,1479,1486,1496,1505,1511,1517,1522,1527,1536,1542,1548,1554,1557,1562,1567,1569,1572,1577,1583,1586,1593,1602,1608,1613,1621,1626,1632,1637,1642,1646,1652,1657,1661],{"path":1398,"title":1399,"date":1400,"tags":1401,"category":1402,"featureImage":1406},"\u002Fposts\u002Fwhat-is-a-nostr-client","What is a Nostr client?","2026-10-26",[1402,1403,1259,1404,1405],"nostr","nostr-client","keys","getting-started",{"url":1407,"title":1399},"v1690313893\u002Fnostr-logo_hwrql1",{"path":1409,"title":1410,"date":1411,"tags":1412,"category":1402,"featureImage":1417},"\u002Fposts\u002Fhow-to-choose-nostr-relays","How to Choose Nostr Relays","2026-04-11",[1402,1413,1259,1414,1415,1416],"relay","security","nostr-relays","censorship-resistance",{"url":1407,"title":1418},"How to choose nostr relays",{"path":1420,"title":1421,"date":1411,"tags":1422,"category":1402,"featureImage":1425},"\u002Fposts\u002Fnostr-relays-privacy-and-security","Nostr Relays, Privacy, and Security",[1402,1413,1259,1414,1423,1424],"key-management","nostr-relay",{"url":1407,"title":1421},{"path":1427,"title":1428,"date":1411,"tags":1429,"category":1402,"featureImage":1431},"\u002Fposts\u002Fwhat-is-a-nostr-relay","What is a Nostr Relay?",[1402,1413,1259,1416,1430,1424],"decentralization",{"url":1407,"title":1432}," What is a Nostr Relay?",{"path":1434,"title":1435,"date":1436,"tags":1437,"category":1402,"featureImage":1439},"\u002Fposts\u002Fwhy-nostr-keys-better-privacy","Why Nostr keys and identity are better for privacy","2026-04-06",[1402,1259,1438,1414],"identity",{"url":1407,"title":1435},{"path":1441,"title":1442,"date":1443,"tags":1444,"category":1402,"featureImage":1450},"\u002Fposts\u002Fbest-nostr-browser-extensions-2026","Best Nostr Browser Extensions (2026): Complete Comparison","2026-03-24",[1402,1445,1446,1414,1447,1448,1449],"browser-extension","nip-07","comparison","porwr","diogel",{"url":1407,"title":1442},{"path":1452,"title":1453,"date":1443,"tags":1454,"category":1402,"featureImage":1457},"\u002Fposts\u002Fhow-to-get-started-with-porwr","Getting Started with Nostr: Porwr Setup Guide (2026)",[1455,1259,1402,1448,1449,1456,1446,1445],"social","cryptography",{"url":1458,"title":1459},"v1690313893\u002Fblog\u002Fdiogel-product-header_x3az6t","Porwr Browser Extension",{"path":1461,"title":1462,"date":1463,"tags":1464,"category":1402,"featureImage":1465},"\u002Fposts\u002Fhow-to-manage-keys-for-nostr","How to manage keys for Nostr","2025-12-15",[1402,1404,1259,1414],{"url":1407,"title":1462},{"path":1467,"title":1468,"date":1463,"tags":1469,"category":1402,"featureImage":1472},"\u002Fposts\u002Fhow-to-self-host-your-nip-05-identity","How to self-host your NIP-05 identity",[1402,1470,1259,1471],"nip-05","self-hosting",{"url":1407,"title":1468},{"path":1474,"title":1475,"date":1476,"tags":6,"category":1259,"featureImage":1477},"\u002Fposts\u002Fwhy-privacy-is-a-fundamental-human-right","Why privacy is a fundamental human right","2025-12-09",{"url":1478,"title":1475},"v1690313893\u002Fprivacy-header_exiblo",{"path":1480,"title":1481,"date":1482,"tags":6,"category":1483,"featureImage":1484},"\u002Fposts\u002Fhow-government-monetary-policy-erodes-the-value-of-money","How government monetary policy erodes the value of money","2025-12-01","bitcoin",{"url":1485,"title":1481},"v1719908027\u002Fbitcoin_szcm1m",{"path":1487,"title":1488,"date":1489,"tags":1490,"category":1483,"featureImage":1494},"\u002Fposts\u002Fbitaxe-touch-genesis-batch","Bitaxe Touch Genesis Batch","2025-07-23",[1491,1492,1493],"bitaxe","mining","solo",{"url":1495,"title":1488},"v1690313878\u002Fbitaxe-touch_c6qrjd",{"path":1497,"title":1498,"date":1499,"tags":1500,"category":1483,"featureImage":1504},"\u002Fposts\u002Fbitcoin-is-not-a-ponzi-scheme","Bitcoin is not a Ponzi Scheme","2025-07-22",[1501,1502,1503],"ponzi","economics","investment",{"url":1485,"title":1498},{"path":1506,"title":1507,"date":1499,"tags":1508,"category":1483,"featureImage":1510},"\u002Fposts\u002Fgetting-started-with-public-pool-mining","Getting started with Public Pool Mining",[1492,1493,1509],"lottery",{"url":1485,"title":1507},{"path":1512,"title":1513,"date":1514,"tags":1515,"category":1483,"featureImage":1516},"\u002Fposts\u002Fgetting-started-with-solo-mining","Getting started with solo mining","2025-07-19",[1491,1492,1493,1509],{"url":1485,"title":1513},{"path":1518,"title":1519,"date":1514,"tags":1520,"category":1483,"featureImage":1521},"\u002Fposts\u002Fwhat-is-bitcoin-mining","What is Bitcoin mining",[1492,1483],{"url":1485,"title":1519},{"path":1523,"title":1524,"date":1514,"tags":1525,"category":1483,"featureImage":1526},"\u002Fposts\u002Fwhat-is-solo-mining","What is solo mining",[1493],{"url":1485,"title":1524},{"path":1528,"title":1529,"date":1530,"tags":1531,"category":1483,"featureImage":1534},"\u002Fposts\u002Fhow-to-run-a-bitcoin-node","How to run a Bitcoin Node with Umbrel Home","2025-07-14",[1532,1533],"node","umbrel",{"url":1485,"title":1535},"How to run a Bitcoin node",{"path":1537,"title":1538,"date":1539,"tags":1540,"category":1402,"featureImage":1541},"\u002Fposts\u002Fhow-to-get-started-with-nostr","How to get started with Nostr","2024-10-09",[1402,1405,1259,1404],{"url":1407,"title":1538},{"path":1543,"title":1544,"date":1545,"tags":6,"category":1546,"featureImage":1547},"\u002Fposts\u002Fhow-to-use-layouts-and-pages-in-nuxt","How to use layouts and pages in Nuxt","2024-10-08","development",{"url":1264,"title":1544},{"path":1549,"title":1550,"date":1551,"tags":6,"category":1546,"featureImage":1552},"\u002Fposts\u002Fhow-to-add-tailwindcss-to-nuxt","How to add tailwindcss to nuxt","2024-10-07",{"url":1264,"title":1553},"Getting started with Nuxt",{"path":344,"title":1553,"date":1555,"tags":6,"category":1546,"featureImage":1556},"2024-10-06",{"url":1264,"title":1553},{"path":1558,"title":1559,"date":1555,"tags":6,"category":1546,"featureImage":1560},"\u002Fposts\u002Fhow-to-store-terraform_state-in-digital-ocean-space","How to store Terraform state in DigitalOcean Spaces",{"url":1561,"title":1559},"v1690313893\u002Fterraform-header_ixmkgg",{"path":1563,"title":1564,"date":1565,"tags":6,"category":1546,"featureImage":1566},"\u002Fposts\u002Fhow-to-use-terraform-with-digitalocean","How to use Terraform with DigitalOcean","2024-10-05",{"url":1561,"title":1564},{"path":1267,"title":5,"date":1260,"tags":6,"category":1259,"featureImage":1568},{"url":1264,"title":5},{"path":1291,"title":1290,"date":1260,"tags":6,"category":1259,"featureImage":1570},{"url":1571,"title":1290},"v1690313893\u002Fanalytics_nlew9f",{"path":1573,"title":1574,"date":1260,"tags":1575,"category":1402,"featureImage":1576},"\u002Fposts\u002Fwhat-is-a-nip-07-signer","What is a NIP-07 signer?",[1402,1446,1445,1414],{"url":1407,"title":1574},{"path":1578,"title":1579,"date":1260,"tags":1580,"category":1402,"featureImage":1582},"\u002Fposts\u002Fwhat-is-nostr","What is Nostr?",[1402,1581,1259,1430],"relays",{"url":1407,"title":1579},{"path":41,"title":42,"date":1260,"tags":6,"category":1259,"featureImage":1584},{"url":1585,"title":42},"v1690313893\u002Fblog\u002Ffathom-header_y7s0x2",{"path":1587,"title":1588,"date":1589,"tags":6,"category":1546,"featureImage":1590},"\u002Fposts\u002Fwhat-is-api-integration","What is API Integration?","2024-06-04",{"url":1591,"title":1592},"v1719908247\u002Fapi_f3f1mh","What is API integration?",{"path":1594,"title":1595,"date":1596,"tags":1597,"category":1483,"featureImage":1599},"\u002Fposts\u002Fhow-blockchain-uses-cryptography","How Blockchain uses Cryptography","2024-05-18",[1598,1456],"blockchain",{"url":1600,"title":1601},"v1690313893\u002Fblockchain_tfrcrd","What is blockchain?",{"path":1603,"title":1604,"date":1605,"tags":6,"category":1546,"featureImage":1606},"\u002Fposts\u002Fhow-to-create-a-websocket-server-in-dotnet","How to create a WebSocket server in dotnet","2024-05-15",{"url":1607,"title":1604},"v1719908486\u002Fwebsockets_pjqtld",{"path":1609,"title":1610,"date":1605,"tags":1611,"category":1483,"featureImage":1612},"\u002Fposts\u002Fwhat-is-blockchain","What is Blockchain",[1598,1483],{"url":1600,"title":1601},{"path":1614,"title":1615,"date":1616,"tags":1617,"category":1483,"featureImage":1619},"\u002Fposts\u002Fintroduction-to-public-and-private-key-cryptography","Public Key Cryptography Explained: A Beginner's Guide","2024-05-12",[1618,1483,1402],"encryption",{"url":1600,"title":1620},"Introduction to public and private key cryptography",{"path":1622,"title":1623,"date":1616,"tags":1624,"category":1483,"featureImage":1625},"\u002Fposts\u002Fwhat-is-bitcoin","What is Bitcoin?",[1598,1483],{"url":1485,"title":1623},{"path":1627,"title":1628,"date":1629,"tags":6,"category":1546,"featureImage":1630},"\u002Fposts\u002Fwhat-are-web-sockets","What are Web Sockets","2023-09-06",{"url":1607,"title":1631},"What are Websockets",{"path":1633,"title":1634,"date":1635,"tags":6,"category":1546,"featureImage":1636},"\u002Fposts\u002Fwhat-is-api-first","What is API First?","2023-07-13",{"url":1591,"title":1634},{"path":1638,"title":1639,"date":1640,"tags":6,"category":1546,"featureImage":1641},"\u002Fposts\u002Fapi-gateway-pattern","API Gateway Pattern","2023-06-10",{"url":1591,"title":1639},{"path":1643,"title":1644,"date":1640,"tags":6,"category":1546,"featureImage":1645},"\u002Fposts\u002Fbackend-for-frontend-design-pattern","Backend for Frontend Design Pattern",{"url":1591,"title":1644},{"path":1647,"title":1648,"date":1649,"tags":6,"category":1546,"featureImage":1650},"\u002Fposts\u002Fguide-api-development","An introductory guide to API Development","2023-06-05",{"url":1591,"title":1651},"API Development",{"path":1653,"title":1654,"date":1649,"tags":6,"category":1546,"featureImage":1655},"\u002Fposts\u002Fwhat-is-a-rest-api","What is a REST API?",{"url":1591,"title":1656},"What is an API?",{"path":1658,"title":1656,"date":1659,"tags":6,"category":1546,"featureImage":1660},"\u002Fposts\u002Fwhat-is-an-api","2023-06-01",{"url":1591,"title":1656},{"path":1662,"title":1663,"date":1659,"tags":6,"category":1546,"featureImage":1664},"\u002Fposts\u002Fwhat-is-api-development","What is API Development ?",{"url":1591,"title":1665},"What is API development?",1793132667139]