[{"data":1,"prerenderedAt":584},["ShallowReactive",2],{"navigation":3,"\u002Fen\u002Farticles\u002F2026\u002Fapril\u002Fhow-i-made-my-fork-bilingual-and-published-it-right":177},[4,62],{"title":5,"path":6,"stem":7,"children":8},"About","\u002Fen","en\u002F1.index",[9,10,56],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13,"children":14},"Blog","\u002Fen\u002Farticles","en\u002F2.articles",[15],{"title":16,"path":17,"stem":18,"children":19,"page":33},"2026","\u002Fen\u002Farticles\u002F2026","en\u002Farticles\u002F2026",[20,34,47],{"title":21,"path":22,"stem":23,"children":24,"page":33},"April","\u002Fen\u002Farticles\u002F2026\u002Fapril","en\u002Farticles\u002F2026\u002Fapril",[25,29],{"title":26,"path":27,"stem":28},"Improving My App's Vibes with DESIGN.md","\u002Fen\u002Farticles\u002F2026\u002Fapril\u002Fexploring-llm-ui","en\u002Farticles\u002F2026\u002Fapril\u002Fexploring-llm-ui",{"title":30,"path":31,"stem":32},"How I Made My Fork Bilingual and Published It Right","\u002Fen\u002Farticles\u002F2026\u002Fapril\u002Fhow-i-made-my-fork-bilingual-and-published-it-right","en\u002Farticles\u002F2026\u002Fapril\u002Fhow-i-made-my-fork-bilingual-and-published-it-right",false,{"title":35,"path":36,"stem":37,"children":38,"page":33},"July","\u002Fen\u002Farticles\u002F2026\u002Fjuly","en\u002Farticles\u002F2026\u002Fjuly",[39,43],{"title":40,"path":41,"stem":42},"From Idea to MS Teams: Deploying an Agent","\u002Fen\u002Farticles\u002F2026\u002Fjuly\u002Ffrom-idea-to-ms-teams-agent","en\u002Farticles\u002F2026\u002Fjuly\u002Ffrom-idea-to-ms-teams-agent",{"title":44,"path":45,"stem":46},"Legally Spying on Your Competition is Possible","\u002Fen\u002Farticles\u002F2026\u002Fjuly\u002Fspying-on-your-rivals","en\u002Farticles\u002F2026\u002Fjuly\u002Fspying-on-your-rivals",{"title":48,"path":49,"stem":50,"children":51,"page":33},"May","\u002Fen\u002Farticles\u002F2026\u002Fmay","en\u002Farticles\u002F2026\u002Fmay",[52],{"title":53,"path":54,"stem":55},"Building an Agent's Personality Around the Customer Journey","\u002Fen\u002Farticles\u002F2026\u002Fmay\u002Fbuilding-agents-with-personality","en\u002Farticles\u002F2026\u002Fmay\u002Fbuilding-agents-with-personality",{"title":57,"path":58,"stem":59,"children":60},"Index","\u002Fen\u002Farticles_index","en\u002F4.articles_index",[61],{"title":57,"path":58,"stem":59},{"title":63,"path":64,"stem":65,"children":66},"Acerca De","\u002Fes","es\u002F1.index",[67,68,153,171],{"title":63,"path":64,"stem":65},{"title":11,"path":69,"stem":70,"children":71},"\u002Fes\u002Farticles","es\u002F2.articles",[72,95,117],{"title":73,"path":74,"stem":75,"children":76,"page":33},"2024","\u002Fes\u002Farticles\u002F2024","es\u002Farticles\u002F2024",[77,86],{"title":78,"path":79,"stem":80,"children":81,"page":33},"Diciembre","\u002Fes\u002Farticles\u002F2024\u002Fdiciembre","es\u002Farticles\u002F2024\u002Fdiciembre",[82],{"title":83,"path":84,"stem":85},"Diciembre es un mes más","\u002Fes\u002Farticles\u002F2024\u002Fdiciembre\u002Fhaikus","es\u002Farticles\u002F2024\u002Fdiciembre\u002Fhaikus",{"title":87,"path":88,"stem":89,"children":90,"page":33},"Octubre","\u002Fes\u002Farticles\u002F2024\u002Foctubre","es\u002Farticles\u002F2024\u002Foctubre",[91],{"title":92,"path":93,"stem":94},"Viaje de regreso","\u002Fes\u002Farticles\u002F2024\u002Foctubre\u002Fhaikus","es\u002Farticles\u002F2024\u002Foctubre\u002Fhaikus",{"title":96,"path":97,"stem":98,"children":99,"page":33},"2025","\u002Fes\u002Farticles\u002F2025","es\u002Farticles\u002F2025",[100,109],{"title":101,"path":102,"stem":103,"children":104,"page":33},"Agosto","\u002Fes\u002Farticles\u002F2025\u002Fagosto","es\u002Farticles\u002F2025\u002Fagosto",[105],{"title":106,"path":107,"stem":108},"Hola Mundo","\u002Fes\u002Farticles\u002F2025\u002Fagosto\u002Fholamundo","es\u002Farticles\u002F2025\u002Fagosto\u002Fholamundo",{"title":87,"path":110,"stem":111,"children":112,"page":33},"\u002Fes\u002Farticles\u002F2025\u002Foctubre","es\u002Farticles\u002F2025\u002Foctubre",[113],{"title":114,"path":115,"stem":116},"El Antipatrón de la Red Veloz","\u002Fes\u002Farticles\u002F2025\u002Foctubre\u002Flatencia","es\u002Farticles\u002F2025\u002Foctubre\u002Flatencia",{"title":16,"path":118,"stem":119,"children":120,"page":33},"\u002Fes\u002Farticles\u002F2026","es\u002Farticles\u002F2026",[121,133,145],{"title":21,"path":122,"stem":123,"children":124,"page":33},"\u002Fes\u002Farticles\u002F2026\u002Fapril","es\u002Farticles\u002F2026\u002Fapril",[125,129],{"title":126,"path":127,"stem":128},"Mejorando las VIBES de mi aplicación con DESIGN.md","\u002Fes\u002Farticles\u002F2026\u002Fapril\u002Fexploring-llm-ui","es\u002Farticles\u002F2026\u002Fapril\u002Fexploring-llm-ui",{"title":130,"path":131,"stem":132},"Cómo volví mi fork multilenguaje y lo publiqué bien","\u002Fes\u002Farticles\u002F2026\u002Fapril\u002Fhow-i-made-my-fork-bilingual-and-published-it-right","es\u002Farticles\u002F2026\u002Fapril\u002Fhow-i-made-my-fork-bilingual-and-published-it-right",{"title":35,"path":134,"stem":135,"children":136,"page":33},"\u002Fes\u002Farticles\u002F2026\u002Fjuly","es\u002Farticles\u002F2026\u002Fjuly",[137,141],{"title":138,"path":139,"stem":140},"De Idea a Ms Teams: Desplegando un Agente","\u002Fes\u002Farticles\u002F2026\u002Fjuly\u002Ffrom-idea-to-ms-teams-agent","es\u002Farticles\u002F2026\u002Fjuly\u002Ffrom-idea-to-ms-teams-agent",{"title":142,"path":143,"stem":144},"Espiar a Tu Competencia de Manera Legal es Posible","\u002Fes\u002Farticles\u002F2026\u002Fjuly\u002Fspying-on-your-rivals","es\u002Farticles\u002F2026\u002Fjuly\u002Fspying-on-your-rivals",{"title":48,"path":146,"stem":147,"children":148,"page":33},"\u002Fes\u002Farticles\u002F2026\u002Fmay","es\u002Farticles\u002F2026\u002Fmay",[149],{"title":150,"path":151,"stem":152},"Construyendo la personalidad de un agente en base a la travesía del cliente","\u002Fes\u002Farticles\u002F2026\u002Fmay\u002Fbuilding-agents-with-personality","es\u002Farticles\u002F2026\u002Fmay\u002Fbuilding-agents-with-personality",{"title":154,"path":155,"stem":156,"children":157},"Galería","\u002Fes\u002Fgallery","es\u002F3.gallery",[158],{"title":96,"path":159,"stem":160,"children":161,"page":33},"\u002Fes\u002Fgallery\u002F2025","es\u002Fgallery\u002F2025",[162],{"title":163,"path":164,"stem":165,"children":166,"page":33},"Septiembre","\u002Fes\u002Fgallery\u002F2025\u002Fseptiembre","es\u002Fgallery\u002F2025\u002Fseptiembre",[167],{"title":168,"path":169,"stem":170},"Cielo de Oyón","\u002Fes\u002Fgallery\u002F2025\u002Fseptiembre\u002Fholamundo","es\u002Fgallery\u002F2025\u002Fseptiembre\u002Fholamundo",{"title":172,"path":173,"stem":174,"children":175},"Lista","\u002Fes\u002Farticles_index","es\u002F4.articles_index",[176],{"title":172,"path":173,"stem":174},{"id":178,"title":30,"author":179,"badges":182,"body":183,"canonical":182,"cover":571,"date":572,"description":573,"extension":574,"layout":575,"meta":576,"navigation":296,"path":31,"seo":582,"stem":32,"__hash__":583},"content\u002Fen\u002Farticles\u002F2026\u002Fapril\u002Fhow-i-made-my-fork-bilingual-and-published-it-right.md",{"name":180,"url":181},"Ever Burga","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Feverburga\u002F",null,{"type":184,"value":185,"toc":565},"minimark",[186,190,194,197,200,203,207,230,233,236,239,242,250,493,520,534,537,540,561],[187,188,30],"h1",{"id":189},"how-i-made-my-fork-bilingual-and-published-it-right",[191,192,193],"p",{},"This post marks the rebirth of my blog. Not because I suddenly have a grand editorial vision or a pressing need to share wisdom with the world. I just finally touched it again seriously.",[191,195,196],{},"I remember seeing a post about the creator of OpenClaw: dozens of repos, and the first viral one was OpenClaw.",[191,198,199],{},"That felt a lot like life. You take enough shots, one of them lands. So here we are.",[191,201,202],{},"Now that I am back and Claude 4.6 showed up and all that, the whole thing feels a bit blurry. A big part of the corrections I am sharing here were contributed by Claude. I still do not know how much credit I should take. If you are only here out of curiosity and want the npm publishing angle, here is the brief.",[204,205,57],"h2",{"id":206},"index",[208,209,210,218,224],"ol",{},[211,212,213],"li",{},[214,215,217],"a",{"href":216},"#what-i-actually-worked-on","What I actually worked on",[211,219,220],{},[214,221,223],{"href":222},"#the-lines-that-actually-matter","The lines that actually matter",[211,225,226],{},[214,227,229],{"href":228},"#repo","Repo",[204,231,217],{"id":232},"what-i-actually-worked-on",[191,234,235],{},"I looked at my branch history and, to be fair, there was at least one moment where I had to be the human in the loop and fix the npm scope by creating an organization.",[191,237,238],{},"The annoying detail is simple: your handle on GitHub and npmjs should match, or you need an org that does. That part is boring, but it is also the part that breaks the nice story if you ignore it.",[204,240,223],{"id":241},"the-lines-that-actually-matter",[191,243,244,245,249],{},"This is the core of my ",[246,247,248],"code",{},"publish.yml",":",[251,252,257],"pre",{"className":253,"code":254,"language":255,"meta":256,"style":256},"language-yaml shiki shiki-themes github-light github-dark","on:\n  workflow_run:\n    workflows: [\"ci-main\", \"ci-dev\"]\n    types: [completed]\n    branches: [main, dev]\n\njobs:\n  publish:\n    if: ${{ github.event.workflow_run.conclusion == 'success' }}\n\n    steps:\n      - uses: actions\u002Fcheckout@v4\n        with:\n          ref: ${{ github.event.workflow_run.head_branch }}\n\n      - uses: actions\u002Fsetup-node@v4\n        with:\n          node-version: 22.14\n          registry-url: https:\u002F\u002Fregistry.npmjs.org\n\n      - name: Upgrade npm\n        run: npm install -g npm@latest\n\n      - name: Install dependencies\n        run: pnpm install --ignore-scripts\n\n      - name: Bump version with dev suffix\n        if: ${{ github.event.workflow_run.head_branch == 'dev' }}\n        run: |\n          COMMIT=$(git rev-parse --short HEAD)\n          VERSION=$(node -p \"require('.\u002Fpackage.json').version\")\n          npm version \"${VERSION}-dev.${COMMIT}\" --no-git-tag-version\n\n      - name: Publish to npm\n        run: npm publish --access public\n\n      - name: Publish to GitHub Packages\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        run: npm publish --access public\n","yaml","",[246,258,259,267,273,279,285,291,298,304,310,316,321,327,333,339,345,350,356,361,367,373,378,384,390,395,401,407,412,418,424,430,436,442,448,453,459,465,470,476,482,488],{"__ignoreMap":256},[260,261,264],"span",{"class":262,"line":263},"line",1,[260,265,266],{},"on:\n",[260,268,270],{"class":262,"line":269},2,[260,271,272],{},"  workflow_run:\n",[260,274,276],{"class":262,"line":275},3,[260,277,278],{},"    workflows: [\"ci-main\", \"ci-dev\"]\n",[260,280,282],{"class":262,"line":281},4,[260,283,284],{},"    types: [completed]\n",[260,286,288],{"class":262,"line":287},5,[260,289,290],{},"    branches: [main, dev]\n",[260,292,294],{"class":262,"line":293},6,[260,295,297],{"emptyLinePlaceholder":296},true,"\n",[260,299,301],{"class":262,"line":300},7,[260,302,303],{},"jobs:\n",[260,305,307],{"class":262,"line":306},8,[260,308,309],{},"  publish:\n",[260,311,313],{"class":262,"line":312},9,[260,314,315],{},"    if: ${{ github.event.workflow_run.conclusion == 'success' }}\n",[260,317,319],{"class":262,"line":318},10,[260,320,297],{"emptyLinePlaceholder":296},[260,322,324],{"class":262,"line":323},11,[260,325,326],{},"    steps:\n",[260,328,330],{"class":262,"line":329},12,[260,331,332],{},"      - uses: actions\u002Fcheckout@v4\n",[260,334,336],{"class":262,"line":335},13,[260,337,338],{},"        with:\n",[260,340,342],{"class":262,"line":341},14,[260,343,344],{},"          ref: ${{ github.event.workflow_run.head_branch }}\n",[260,346,348],{"class":262,"line":347},15,[260,349,297],{"emptyLinePlaceholder":296},[260,351,353],{"class":262,"line":352},16,[260,354,355],{},"      - uses: actions\u002Fsetup-node@v4\n",[260,357,359],{"class":262,"line":358},17,[260,360,338],{},[260,362,364],{"class":262,"line":363},18,[260,365,366],{},"          node-version: 22.14\n",[260,368,370],{"class":262,"line":369},19,[260,371,372],{},"          registry-url: https:\u002F\u002Fregistry.npmjs.org\n",[260,374,376],{"class":262,"line":375},20,[260,377,297],{"emptyLinePlaceholder":296},[260,379,381],{"class":262,"line":380},21,[260,382,383],{},"      - name: Upgrade npm\n",[260,385,387],{"class":262,"line":386},22,[260,388,389],{},"        run: npm install -g npm@latest\n",[260,391,393],{"class":262,"line":392},23,[260,394,297],{"emptyLinePlaceholder":296},[260,396,398],{"class":262,"line":397},24,[260,399,400],{},"      - name: Install dependencies\n",[260,402,404],{"class":262,"line":403},25,[260,405,406],{},"        run: pnpm install --ignore-scripts\n",[260,408,410],{"class":262,"line":409},26,[260,411,297],{"emptyLinePlaceholder":296},[260,413,415],{"class":262,"line":414},27,[260,416,417],{},"      - name: Bump version with dev suffix\n",[260,419,421],{"class":262,"line":420},28,[260,422,423],{},"        if: ${{ github.event.workflow_run.head_branch == 'dev' }}\n",[260,425,427],{"class":262,"line":426},29,[260,428,429],{},"        run: |\n",[260,431,433],{"class":262,"line":432},30,[260,434,435],{},"          COMMIT=$(git rev-parse --short HEAD)\n",[260,437,439],{"class":262,"line":438},31,[260,440,441],{},"          VERSION=$(node -p \"require('.\u002Fpackage.json').version\")\n",[260,443,445],{"class":262,"line":444},32,[260,446,447],{},"          npm version \"${VERSION}-dev.${COMMIT}\" --no-git-tag-version\n",[260,449,451],{"class":262,"line":450},33,[260,452,297],{"emptyLinePlaceholder":296},[260,454,456],{"class":262,"line":455},34,[260,457,458],{},"      - name: Publish to npm\n",[260,460,462],{"class":262,"line":461},35,[260,463,464],{},"        run: npm publish --access public\n",[260,466,468],{"class":262,"line":467},36,[260,469,297],{"emptyLinePlaceholder":296},[260,471,473],{"class":262,"line":472},37,[260,474,475],{},"      - name: Publish to GitHub Packages\n",[260,477,479],{"class":262,"line":478},38,[260,480,481],{},"        env:\n",[260,483,485],{"class":262,"line":484},39,[260,486,487],{},"          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n",[260,489,491],{"class":262,"line":490},40,[260,492,464],{},[494,495,496,505,511,514,517],"ul",{},[211,497,498,501,502],{},[246,499,500],{},"dev"," publishes with a commit-based suffix and does not pollute ",[246,503,504],{},"latest",[211,506,507,510],{},[246,508,509],{},"main"," publishes cleanly",[211,512,513],{},"npm does not depend on long-lived tokens lying around",[211,515,516],{},"GitHub Packages stays in sync",[211,518,519],{},"publish only runs after CI passes",[191,521,523,524,523,530],{"align":522},"center","\n  ",[525,526],"img",{"src":527,"alt":528,"title":529},"\u002Farticles\u002F2026\u002Fapril\u002Ftrusted_publisher_npmjs.png","Trusted publisher setup in npmjs","Trusted publisher connected to GitHub Actions",[531,532,533],"em",{},"the boring part, which is usually where the real problems live",[204,535,229],{"id":536},"repo",[191,538,539],{},"These are the sources:",[494,541,542,551],{},[211,543,544,545],{},"repo: ",[214,546,550],{"href":547,"rel":548},"https:\u002F\u002Fgithub.com\u002F4xeverburga\u002Fnuxt-alpine-spanishplus",[549],"nofollow","4xeverburga\u002Fnuxt-alpine-spanishplus",[211,552,553,554],{},"workflows: ",[214,555,558],{"href":556,"rel":557},"https:\u002F\u002Fgithub.com\u002F4xeverburga\u002Fnuxt-alpine-spanishplus\u002Ftree\u002Fmain\u002F.github\u002Fworkflows",[549],[246,559,560],{},".github\u002Fworkflows",[562,563,564],"style",{},"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);}",{"title":256,"searchDepth":269,"depth":269,"links":566},[567,568,569,570],{"id":206,"depth":269,"text":57},{"id":232,"depth":269,"text":217},{"id":241,"depth":269,"text":223},{"id":536,"depth":269,"text":229},"\u002Farticles\u002F2026\u002Fapril\u002Fel_blog_renace.png","2026-04-13T10:00:00.000Z","This post marks the rebirth of my blog, even if an awkward part of the credit probably belongs to AI.","md","article",{"head":577},{"meta":578},[579],{"name":580,"content":581},"keywords","nuxt theme, bilingual blog, npm publish, github actions, github workflows, npmjs, github, i18n, OIDC, trusted publishing, ci-cd, open source",{"title":30,"description":573},"fWzggnlmPbb3gun85Z42Il_Dcd5c1BGeiAlvuykZACk",1785323412205]