<?xml version='1.0' encoding='UTF-8'?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>IPFS Website Lab &amp; Publishing Guides</title>
    <link>https://ipfswebsite.com/</link>
    <description>Practical IPFS publishing guides, topic collections, and full-length Website Lab articles.</description>
    <language>en</language>
    <copyright>© 2026 IPFSwebsite.com</copyright>
    <atom:link href="https://ipfswebsite.com/rss.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>AI IPFS website builder checklist: review the export before publishing</title>
      <link>https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/</guid>
      <description>Evaluate generated sites by their actual files, dependencies, accessibility, metadata, and release behavior—not by a convincing preview.</description>
      <pubDate>Thu, 17 Sep 2026 00:00:00 +0000</pubDate>
      <category>Publishing</category>
      <content:encoded><![CDATA[<p>An AI website builder can produce a convincing preview long before it produces a dependable static release. The preview may rely on a development server, remote styling scripts, invented content, or controls that have no implementation. Before publishing to IPFS, evaluate the exported files as an ordinary website and as a public release artifact.</p>
<p>This checklist is designed for developers and publishers who use generated code or content as a starting point. It does not assume a particular AI product, promise automated correctness, or equate visual polish with readiness. The central question is simple: can you inspect, rebuild, test, and operate the exact folder you are about to distribute?</p>
<h2 id="write-an-output-contract-first">Write an output contract first</h2>
<p>Describe the artifact you require before asking for a design. Specify static HTML, a compiled stylesheet, lightweight scripts, real page directories, included images, and no hidden backend requirement. State which features are intentionally absent, such as account systems, contact forms, payments, or live search.</p>
<p>Give the builder a route inventory and require every navigation item to resolve to a completed destination. Ask for a content inventory too: titles, descriptions, article excerpts, publication dates, and image filenames. These requirements turn a vague instruction to make a website into something you can verify.</p>
<p>Our <a href="https://ipfswebsite.com/ai-ipfs-website-builder/">AI IPFS website builder overview</a> outlines the review stages. Treat the builder as a contributor to that process, not as the final authority on whether its own output is ready.</p>
<h2 id="inspect-the-export-not-only-the-preview">Inspect the export, not only the preview</h2>
<p>Open the generated directory and identify what it contains. Look for source files that still require a build, packages that only work in development, and references to services that are not included in the delivery. A screenshot cannot answer these questions.</p>
<p>Run the site through a local static HTTP server with the development server stopped. Open a nested page directly and reload it. If the website only works when launched through the builder's special preview environment, the export has not yet demonstrated the portability you need.</p>
<p>Check the browser's network panel for unexpected requests. A site that imports its styling engine or images from temporary preview URLs may fail after those services change or disappear. Decide which external dependencies are deliberate and remove the rest.</p>
<h2 id="review-generated-instructions-as-untrusted-input">Review generated instructions as untrusted input</h2>
<p>AI-assisted workflows often read templates, repository files, documents, and web content. Those materials can contain text that attempts to redirect the assistant or automation. The <a href="https://genai.owasp.org/llmrisk/llm01-prompt-injection/">OWASP prompt-injection guidance</a> describes this risk: supplied content can try to influence an application's instructions rather than merely serve as data.</p>
<p>For a publishing workflow, keep credentials and production deployment authority outside the generation step. Do not allow a template comment or fetched document to authorize changing DNS, uploading private files, or running arbitrary commands. Require review at the boundary between generated output and privileged actions.</p>
<p>This is a workflow-control problem, not a reason to assume every generated page is malicious. A narrow, inspectable process makes both accidental mistakes and deliberate redirection easier to contain.</p>
<h2 id="check-content-for-invented-claims">Check content for invented claims</h2>
<p>Read the homepage as though you were a visitor evaluating the organization. Remove unsupported customer counts, testimonials, partnership logos, certifications, benchmark results, and service promises. A polished template can make invented credibility look ordinary, which is exactly why it needs explicit review.</p>
<p>Check whether the copy describes an actual product or merely the site's educational topic. A guide to IPFS hosting should not accidentally claim to operate a hosting network. A page about AI builders should not present a working generator when the site only offers documentation.</p>
<p>Review technical claims against primary sources and distinguish facts from recommendations. Keep examples clearly labeled as examples. Do not let a request for search optimization turn into repetitive keywords or assertions that have no supporting evidence.</p>
<h2 id="verify-the-site-is-really-static">Verify the site is really static</h2>
<p>Search the export for form handlers, server-only routes, database connections, and environment variables. Identify any feature that expects a runtime application service. Then either implement an appropriate external architecture deliberately or remove the feature from the static site.</p>
<p>A contact page can use a visible email address and a mail link without pretending that a form submits somewhere. A guide library can use category links without a search input that has no index. A documentation site can explain wallets without placing a nonfunctional connect button in its header.</p>
<p>Our <a href="https://ipfswebsite.com/ipfs-static-website/">IPFS static website guide</a> describes the difference between public files and backend responsibilities. Use that boundary to evaluate every generated interaction.</p>
<h2 id="test-routes-and-resource-paths">Test routes and resource paths</h2>
<p>Verify that every intended page has a physical entry document. Clean public URLs should correspond to real directories rather than depend on a development server's catch-all behavior. Crawl internal links and inspect any path that points to a missing file or an HTML extension where your route policy excludes it.</p>
<p>Check image sources, CSS background images, script imports, and links assembled in JavaScript. A builder may produce correct relative navigation but leave a root-relative resource path that escapes the release under a gateway prefix.</p>
<p>Test the homepage, a topic page, an article, and an archive directly. This small set covers different path depths and template types. Expand the test to every route before release rather than assuming one successful page proves the whole site works.</p>
<h2 id="review-accessibility-as-behavior">Review accessibility as behavior</h2>
<p>Use the keyboard to open the menu, follow links, and operate expandable sections. Confirm that focus is visible and that a sticky header does not cover an anchored heading. Make sure controls communicate their expanded or collapsed state when appropriate.</p>
<h3 id="test-narrow-screens-and-zoom">Test narrow screens and zoom</h3>
<p>Increase text size and inspect a narrow viewport. Check that long titles, code blocks, and email addresses wrap or scroll intentionally rather than widening the entire page. Test sufficient contrast in normal, hover, and focus states. A visually dramatic neon palette still needs readable text.</p>
<p>Read image alternative text for meaning. A decorative shape does not need a long description, while an instructional diagram should not be labeled merely image. Explicit image dimensions also help keep layouts stable while assets load.</p>
<h2 id="audit-metadata-independently-from-visible-copy">Audit metadata independently from visible copy</h2>
<p>Verify unique titles and descriptions, a single clear H1, canonical URLs, social preview images, and valid structured data. Check that the schema describes visible content rather than invented ratings, authors, or business details. Do not create an organization biography out of assumptions the user never supplied.</p>
<p>Compare article dates across the page, listing, structured data, and RSS feed. Use a consistent editorial policy and do not automatically turn every rebuild into a new modification date. Check that sitemap entries correspond to completed indexable pages.</p>
<p>For a longer editorial workflow, read the <a href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/">IPFS CMS publishing guide</a>. The same validation principles apply whether the content came from a CMS, a text editor, or a generation tool.</p>
<h2 id="inspect-the-release-for-secrets-and-leftovers">Inspect the release for secrets and leftovers</h2>
<p>Remove unused demo branding, sample companies, placeholder contact details, temporary images, and test credentials. Search both source and compiled files, because build tools can embed values in places that are easy to overlook.</p>
<p>Keep the deployment folder limited to public material. Do not include private notes, repository metadata, environment files, or dependency caches simply because the generated project arrived as a large ZIP. Preserve build instructions separately where needed, without making them a requirement for a reader to load the site.</p>
<p>Record what was tested and against which artifact. A passing check on yesterday's folder does not validate today's edited release.</p>
<h2 id="conclusion-make-generation-the-beginning-of-verification">Conclusion: make generation the beginning of verification</h2>
<p>An AI-assisted site becomes publishable through review, testing, and a controlled release process. Define the output, inspect the actual export, verify claims, test accessibility and routes, and keep privileged deployment steps separate. Then publish and retain the approved folder as you would any other IPFS website. The useful promise is not that a builder can replace judgment. It is that a well-defined workflow can turn a draft into an artifact you understand.</p>
]]></content:encoded>
    </item>
    <item>
      <title>IPFS and stablecoin interfaces: verify networks, assets, and payment states</title>
      <link>https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/</guid>
      <description>Plan a stablecoin-related frontend around asset identity, explicit authorization, public-data boundaries, and reliable transaction observation.</description>
      <pubDate>Wed, 24 Jun 2026 00:00:00 +0000</pubDate>
      <category>Web3</category>
      <content:encoded><![CDATA[<p>An IPFS-hosted stablecoin interface is still a financial interaction presented through a website. IPFS can distribute the interface's files, but it does not issue the asset, maintain its target value, approve a payment, or settle a blockchain transaction. Those responsibilities belong to other parts of the system. Keeping them separate is the first step toward an interface that does not mislead users.</p>
<p>This article is a technical planning guide, not a recommendation to buy, hold, or transfer a particular asset. It focuses on how developers can describe supported assets accurately, avoid ambiguous authorization flows, and handle uncertain payment outcomes. The <a href="https://ipfswebsite.com/ipfs-stablecoins/">IPFS stablecoins overview</a> explains the terminology and the limits of the hosting layer.</p>
<h2 id="identify-the-asset-beyond-its-ticker">Identify the asset beyond its ticker</h2>
<p>A short symbol and a familiar logo are not enough to identify a token. Your configuration should include the network, the relevant contract or mint identifier, the supported asset representation, and the display precision. Review these values through an authoritative source before release rather than copying them from a random explorer result or an old code sample.</p>
<p>For example, <a href="https://developers.circle.com/stablecoins/usdc-contract-addresses">Circle's official USDC contract-address reference</a> lists network-specific identifiers and separates production networks from testing environments. That is a useful illustration of why asset identity must include the network. It is not an endorsement of USDC or a claim that every token using the same symbol is equivalent.</p>
<p>Keep the approved configuration versioned with the frontend release. A change to a destination or asset identifier should receive the same attention as a change to transaction-building code.</p>
<h2 id="separate-hosting-claims-from-asset-claims">Separate hosting claims from asset claims</h2>
<p>Describe what IPFS does in concrete terms: it can distribute a particular frontend release and related public content. Do not suggest that this makes the asset safer, guarantees redemption, fixes its market value, or eliminates risks elsewhere in the application. A content identifier describes content; it is not an audit report.</p>
<p>If the interface discusses an issuer, reserve arrangement, bridge, or redemption process, verify the specific claim against current official material. Avoid collapsing different asset representations into a single label. A native asset and a bridged representation can have different dependencies, even when users encounter similar names.</p>
<p>Keep the public copy proportionate to what your system actually supports. A site that provides documentation should not imply that it operates custody, settlement, or a payment service.</p>
<h2 id="make-the-network-visible-at-the-decision-point">Make the network visible at the decision point</h2>
<p>Display the selected network near the action that matters, not only in a small header badge. When users review a destination and amount, they should also be able to see the relevant network and asset. Avoid relying on color alone to distinguish production from testing.</p>
<p>Handle a network change while the page is open. Clear stale balances and prepared actions when the configuration no longer matches the wallet context. Do not leave a previously valid review screen visible after its assumptions have changed.</p>
<p>A test interface should be unmistakably labeled as a test environment. Do not present test balances or simulated receipts as though they represented real assets or completed commercial payments. Keep screenshots and documentation similarly clear about the environment they depict.</p>
<h2 id="use-precise-amount-handling">Use precise amount handling</h2>
<p>Treat displayed amounts and base-unit amounts as different representations. Use a deliberate conversion strategy that respects the asset's configured precision. Do not allow a casual floating-point conversion to decide the actual amount sent by a transaction.</p>
<p>Validate the amount before preparing an authorization request. Handle empty values, invalid characters, excessive precision, negative numbers, and amounts outside the supported range. The interface should explain the problem without silently rounding a value into a different payment.</p>
<p>Even when the production site is purely informational, examples should distinguish hypothetical amounts from live payment instructions. A technical guide should not accidentally resemble an executable request to send funds to an example destination.</p>
<h2 id="explain-the-action-before-requesting-authorization">Explain the action before requesting authorization</h2>
<p>A connection request, an approval, a transfer, and a signature for another purpose are different actions. Label them accurately. Do not describe an asset approval as logging in, and do not hide a transaction behind a button that merely says verify.</p>
<p>Before a wallet request, show the destination, asset, network, and intended amount or permission. When the workflow needs an allowance, explain the spender and scope. Avoid bundling broad permission into an unrelated setup step without making that consequence visible.</p>
<p>Never ask visitors to enter seed phrases or private keys into the website. A static frontend cannot make such collection safe by being hosted on IPFS. For broader authorization design, see the <a href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/">Ethereum frontend guide</a>.</p>
<h2 id="keep-payment-observation-distinct-from-user-intent">Keep payment observation distinct from user intent</h2>
<p>A user clicking a button does not establish payment. A wallet returning control does not necessarily establish the intended on-chain result. Your system needs a defined way to observe and reconcile the relevant transaction, including the expected network, destination, asset, and amount.</p>
<p>If the interface cannot observe an outcome, state that uncertainty. Do not automatically display a receipt that implies final settlement. Also avoid treating a screenshot, a browser callback, or a user-supplied transaction identifier as sufficient proof for a valuable fulfillment action without verification.</p>
<p>A purely static site may show public transaction information through browser-side services, but reliable fulfillment and private order management can require additional infrastructure. Describe that dependency rather than promising a complete commerce backend from a folder of HTML files.</p>
<h2 id="design-retries-and-duplicate-protection">Design retries and duplicate protection</h2>
<p>A network timeout can occur after a transaction has been submitted. Telling the user to try again immediately may create a duplicate attempt. Preserve the known transaction reference and reconcile the existing action before encouraging another authorization where the workflow permits it.</p>
<p>Give each application-level payment intent a clear identity in the systems responsible for fulfillment. Keep that identity separate from the frontend's temporary display state. Reloading a browser tab should not erase the only record of whether an order is awaiting observation or has already been fulfilled.</p>
<p>When a request must be rebuilt, explain what changed. A new amount, destination, or permission is not merely a technical retry. It is a new decision for the user to review.</p>
<h2 id="protect-private-information-before-distribution">Protect private information before distribution</h2>
<p>Public static content is the wrong place for customer addresses, invoices containing personal data, secret order tokens, or private account information. Do not publish those files in an IPFS release simply because the interface needs to display something similar to an authenticated user.</p>
<p>Minimize what is included in the public bundle and keep sensitive records in an appropriately secured system. A hard-to-guess URL is not a substitute for access control. Changing the current CID or removing a link later does not guarantee that previously distributed copies disappear.</p>
<p>This distinction is especially important for receipts and support screenshots. Review the fields that are safe to show publicly and the fields that should remain private before implementing the page design.</p>
<h2 id="review-runtime-dependencies-and-failure-states">Review runtime dependencies and failure states</h2>
<p>List the wallet, RPC endpoints, asset metadata source, price display source where relevant, and transaction observer. Identify which values are live and which are static configuration. Do not display a stale or assumed value as a current verified fact.</p>
<h3 id="exercise-configuration-failures">Exercise configuration failures</h3>
<p>Test wrong-network behavior, unavailable observers, rejected requests, insufficient resources, and mismatched asset identifiers. Also test how the interface explains uncertainty after a reload. Use appropriate testing environments rather than real funds to discover basic validation mistakes.</p>
<p>Our <a href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/">Solana frontend transaction-state guide</a> offers another view of preparation, submission, and observation. Adapt the principles to the actual network rather than copying a different chain's assumptions.</p>
<h2 id="keep-operational-and-legal-responsibilities-explicit">Keep operational and legal responsibilities explicit</h2>
<p>A payment-related application may introduce responsibilities beyond frontend engineering. Obtain qualified advice appropriate to the activity and jurisdictions involved before operating a service. Do not assume that distributing the interface through IPFS changes those responsibilities or creates an exemption.</p>
<p>Keep user-facing statements aligned with the service you actually operate. Do not claim custody protection, guaranteed recovery, guaranteed value, or audited security without specific support. Clear limitations are more useful than a broad disclaimer attached to misleading promises.</p>
<h2 id="conclusion-accuracy-is-part-of-the-interface">Conclusion: accuracy is part of the interface</h2>
<p>A responsible stablecoin-related frontend identifies the exact asset, makes the network visible, explains authorization, and distinguishes intention from an observed outcome. IPFS can be part of its delivery architecture, but it does not replace those controls. Build the public interface around clear boundaries, protect private information, and test uncertain states before users are asked to make consequential decisions.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A Solana website on IPFS: design the frontend around transaction states</title>
      <link>https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/</guid>
      <description>Prepare a static Solana interface with explicit clusters, wallet behavior, RPC dependencies, and a transaction flow that handles uncertainty.</description>
      <pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate>
      <category>Web3</category>
      <content:encoded><![CDATA[<p>Publishing a Solana website on IPFS changes how the frontend files are distributed. It does not make IPFS execute Solana programs, remove the need to communicate with the network, or turn every wallet response into a completed transaction. A dependable interface keeps those distinctions visible in both its architecture and its user experience.</p>
<p>This guide focuses on the decisions around a static frontend release: cluster configuration, wallet interaction, RPC observation, transaction state, and recovery. It intentionally avoids copying a rapidly changing SDK recipe without a tested project context. For the broader relationship between the networks, start with the <a href="https://ipfswebsite.com/ipfs-solana-website/">IPFS Solana website overview</a>.</p>
<h2 id="map-the-static-and-live-components">Map the static and live components</h2>
<p>List the files that belong in the release: pages, styles, scripts, images, and public configuration. Then list the services contacted after the page loads: wallets, RPC endpoints, indexers, and any application-specific APIs. Mark what each service contributes and what the interface can still do when that service is unavailable.</p>
<p>A useful read-only page should explain the application's purpose without first requiring a wallet connection. The live components can then enhance the interface when available. This gives users a meaningful experience even when their wallet is missing or a network dependency is failing.</p>
<p>Avoid describing the architecture as serverless if it still depends on services operated elsewhere. A more accurate description is a static frontend with explicitly documented runtime dependencies.</p>
<h2 id="keep-cluster-configuration-explicit">Keep cluster configuration explicit</h2>
<p>Use a clear configuration boundary between development and production environments. Display the selected cluster where it matters, especially near actions that authorize changes. Do not assume a user understands which environment a familiar-looking interface is connected to.</p>
<p>Store approved program identifiers and relevant token configuration with the release. Review changes to those values as application changes, not as harmless deployment housekeeping. An interface can be visually identical while pointing to a different destination.</p>
<p>Fail safely when required configuration is missing. A development build should not fall back silently to a production endpoint, and a production release should not display test balances as though they represented real assets. Make the environment unambiguous in both visible copy and operational records.</p>
<h2 id="treat-wallets-as-user-controlled-software">Treat wallets as user-controlled software</h2>
<p>A wallet interaction should follow an intentional action by the user. Explain why a connection is needed and distinguish connection from signing. Do not repeatedly reopen a prompt after the user rejects it, and do not describe a signature request as a routine identity check when it authorizes something more consequential.</p>
<p>Test the interface with no compatible wallet available. Provide a readable explanation rather than an empty button or an uncaught error. Also test account changes and disconnections while the page is open. The application should clear stale assumptions instead of continuing as though the original account is still active.</p>
<p>Our <a href="https://ipfswebsite.com/ipfs-website-dapp/">IPFS website dApp guide</a> covers these browser and authorization boundaries across application architectures.</p>
<h2 id="understand-the-transaction-boundary">Understand the transaction boundary</h2>
<p>A Solana transaction contains instructions and the signatures that authorize the requested changes, with a recent blockhash in the usual transaction flow. The <a href="https://solana.com/docs/core/transactions">official Solana transaction documentation</a> explains that instructions execute together and that a failed instruction causes the transaction's state changes to be reverted. Transaction fees can still apply on failure.</p>
<p>For interface design, the important lesson is that the application must represent the entire requested action, not just the first instruction a developer happens to display. A short label should not conceal additional permissions or account operations.</p>
<p>Keep technical detail available without overwhelming the primary screen. Users should be able to identify what they are authorizing, while developers and support staff should be able to trace the exact transaction being discussed.</p>
<h2 id="prepare-transactions-close-to-authorization">Prepare transactions close to authorization</h2>
<p>Time-sensitive transaction data should not be prepared once and reused indefinitely while a page remains open. Account for a user taking time to review a request, changing accounts, or returning to the tab later. The application should recognize stale preparation and rebuild deliberately when necessary.</p>
<p>Do not silently change the meaning of a transaction between the user's review and the request sent to the wallet. If the application must refresh material details, explain that another review is required. Treat a new authorization request as a new user decision, not as an invisible implementation detail.</p>
<p>Keep the preparation logic testable outside the full interface where practical. This makes it easier to verify the intended instructions and configuration without relying solely on a visually successful click-through.</p>
<h2 id="distinguish-submission-from-confirmation">Distinguish submission from confirmation</h2>
<p>A submitted request, a returned signature, and an observed confirmed outcome are different states. Design the interface to communicate those states accurately. Avoid showing a completed purchase, transfer, or action merely because an RPC endpoint accepted a submission request.</p>
<p>Decide which observed network state is sufficient for the application to present its next step, and document that decision. If observation fails, show uncertainty rather than inventing success or failure. Preserve the transaction identifier so the action can be investigated without guessing which attempt the user means.</p>
<p>Be cautious with retry instructions. If the application lost contact after submission, an immediate repeat can create confusion or an unintended second action. Reconcile the known transaction before preparing another one where the workflow permits it.</p>
<h2 id="make-rpc-dependence-visible-to-operators">Make RPC dependence visible to operators</h2>
<p>An IPFS-hosted frontend may still rely on an RPC service for reads, preparation, submission, and observation. Record the purpose of each endpoint and any browser-facing restrictions. Keep private credentials out of the public bundle and review what identifiers may safely be exposed.</p>
<p>Test a slow or unavailable endpoint separately from a missing frontend asset. Those are different incidents. A website can load perfectly while live data is unavailable, and the page should communicate that state without implying the user's account has changed.</p>
<p>If you configure alternate endpoints, test their behavior rather than assuming they are interchangeable. State freshness, rate limits, and error handling can affect the user experience. A fallback should improve observability, not hide inconsistent results.</p>
<h2 id="publish-a-complete-static-artifact">Publish a complete static artifact</h2>
<p>Build the production frontend and inspect the output for development URLs, sensitive configuration, missing chunks, and external assets. Verify direct navigation to important routes. Do not rely on a development server's fallback behavior to make a production IPFS deployment work.</p>
<p>Use an intended browser origin and test wallet behavior there. The same files opened through a different gateway may run under a different origin, with different storage and permission context. Document the supported entry points instead of making an untested promise about every possible gateway.</p>
<p>The <a href="https://ipfswebsite.com/ipfs-static-website/">IPFS static website guide</a> covers portable routes and resource paths. Apply those checks before moving on to transaction testing.</p>
<h2 id="keep-frontend-and-program-changes-coordinated">Keep frontend and program changes coordinated</h2>
<p>Record the frontend CID together with its expected cluster, program configuration, and source revision. When a program or API changes, assess whether an older frontend remains compatible. A rollback of static files does not undo changes elsewhere in the application.</p>
<p>Retain approved releases according to a deliberate policy and test a rollback before a production incident. Keep release records outside the only machine or service that hosts the frontend. An independently readable manifest is useful when a dashboard is unavailable.</p>
<p>For a comparison with another application architecture, read <a href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/">the Ethereum frontend release guide</a>. The shared lesson is separation of responsibilities, not an assumption that the transaction models are identical.</p>
<h2 id="test-a-realistic-failure-matrix">Test a realistic failure matrix</h2>
<p>Include wallet rejection, account changes, wrong environment, expired preparation, RPC errors, failed instructions, and uncertain observation in your test plan. Use controlled test environments and known fixtures. Record the exact frontend release that passed the tests.</p>
<h3 id="review-the-error-copy">Review the error copy</h3>
<p>Check the language of every error state. An expired request should not accuse the user of a security problem, and an unavailable observer should not report a completed outcome. Clear wording is part of correctness when users must decide whether to wait, investigate, or authorize a new attempt.</p>
<h2 id="conclusion-publish-files-model-live-behavior">Conclusion: publish files, model live behavior</h2>
<p>A Solana frontend on IPFS works best when the static release and the live transaction journey are designed together but not confused. Make the cluster explicit, respect wallet decisions, prepare requests carefully, and represent uncertainty honestly. A content-addressed frontend gives you a useful release boundary. The reliability of the application still depends on the correctness of its instructions, its runtime services, and the states it communicates to the person using it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>An Ethereum dApp frontend on IPFS: separate hosting from execution</title>
      <link>https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/</guid>
      <description>Map the frontend, wallet, RPC endpoint, and contract before publishing an Ethereum interface as a content-addressed release.</description>
      <pubDate>Tue, 18 Nov 2025 00:00:00 +0000</pubDate>
      <category>Web3</category>
      <content:encoded><![CDATA[<p>An Ethereum website can distribute its frontend through IPFS without moving contract execution into the storage network. The browser still receives HTML, CSS, JavaScript, and assets. The application may then read blockchain state through an RPC endpoint and ask a wallet to authorize an action. Those are separate responsibilities, with separate failure modes and trust boundaries.</p>
<p>The practical benefit of separating them is clarity. You can identify a frontend release by its CID while independently documenting the chain, contracts, wallet behavior, and external services it expects. This guide focuses on that release architecture, not on writing a token contract or recommending a financial application. The <a href="https://ipfswebsite.com/ipfs-ethereum-website/">IPFS Ethereum website overview</a> provides a shorter starting point.</p>
<h2 id="draw-the-application-before-deploying-it">Draw the application before deploying it</h2>
<p>Write down the frontend, wallet, RPC service, contract addresses, indexers, and any external data sources. Mark which pieces are included in the published folder and which are contacted at runtime. A site that loads from IPFS may still depend heavily on centralized services; the architecture should describe those dependencies honestly.</p>
<p>The <a href="https://ethereum.org/developers/docs/dapps/">Ethereum developer introduction to dApps</a> distinguishes the user-facing frontend from the smart-contract application and notes that a frontend can be hosted on IPFS. Use that boundary as the starting point for your own diagram rather than treating decentralized as an all-or-nothing label.</p>
<p>For each component, record who controls it and what a failure looks like. A missing image, unavailable RPC endpoint, rejected wallet request, and reverted transaction should not all appear to the user as the same generic error.</p>
<h2 id="make-the-initial-page-useful-without-a-wallet">Make the initial page useful without a wallet</h2>
<p>Do not require a wallet connection just to read what an application does. Explain the purpose, supported network, relevant risks, and available read-only information before asking for authorization. A visitor should be able to understand the interface and leave without triggering a connection prompt.</p>
<p>Separate connection from signing. Connecting a wallet is not the same as authorizing a transaction, and the interface should not blur those actions. Use explicit labels that describe the next step rather than vague instructions to continue or verify.</p>
<p>Test the page with no wallet extension installed. Provide an informative state instead of an exception or a permanently spinning control. Also test a user declining the request. A refusal is an ordinary user choice, not an application failure to be punished with repeated prompts.</p>
<h2 id="lock-down-network-and-contract-configuration">Lock down network and contract configuration</h2>
<p>Maintain an explicit mapping between each supported chain and its approved contract addresses. Do not infer that a contract with the same name or an address copied from another network is the intended destination. Treat configuration changes as reviewable release changes.</p>
<p>Display the selected network and the important destination information near an action. Before preparing a transaction, confirm that the wallet's current network matches the application's expectations. Handle a network change while the page is open, rather than assuming the initial connection stays valid forever.</p>
<p>Keep development and production settings clearly separated. A test interface should not silently switch to mainnet because a missing environment variable falls back to a convenient default. Fail visibly when critical configuration is absent.</p>
<h2 id="choose-a-browser-safe-delivery-context">Choose a browser-safe delivery context</h2>
<p>The origin under which the frontend runs affects browser storage, permissions, and interactions with external services. Test the intended custom domain or gateway origin, not just a local development URL. An application working under one hostname does not establish that wallet discovery, API access, and storage behave identically under another.</p>
<p>Prefer an intentionally isolated origin for an application interface. Avoid assuming that arbitrary sites served beneath the same public gateway hostname are independent origins merely because their CID paths differ. The <a href="https://ipfswebsite.com/ipfs-website-dapp/">IPFS dApp architecture guide</a> explains why delivery context belongs in your security review.</p>
<p>Keep the set of supported public entry points small enough to test. Additional mirrors can be useful, but each should have a documented release identity and an intentional relationship to the canonical domain.</p>
<h2 id="keep-secrets-out-of-the-release">Keep secrets out of the release</h2>
<p>Everything delivered to a browser must be treated as available to the visitor. Private RPC credentials, deployment keys, pinning tokens, and administrative secrets do not belong in the frontend bundle. A minified file is not encrypted, and a configuration variable does not become private because its name looks internal.</p>
<p>Some services offer browser-facing identifiers with origin restrictions or limited permissions. Review the actual service's security model instead of treating every API key as interchangeable. Document any runtime dependency and its limits so an operator knows what can fail after the files have been published.</p>
<p>Scan the production output, not only the source repository. Build tools can substitute values into JavaScript or generate files that expose more configuration than a developer expects.</p>
<h2 id="model-the-transaction-journey-clearly">Model the transaction journey clearly</h2>
<p>A useful interface distinguishes preparation, wallet review, submission, and observed network outcome. Do not display success merely because a wallet returned control to the page. A transaction identifier can help track an action, but it should not be presented as proof that the intended state change is complete.</p>
<p>Keep the user's intended amount, destination, and action visible throughout the journey. Avoid replacing meaningful information with an animation while the user is making an authorization decision. If the application changes the transaction after an error, explain the change and request authorization for the new action.</p>
<p>Handle rejection, RPC unavailability, insufficient resources, and contract errors as distinct cases where possible. The interface should help the user understand what happened without pretending to diagnose every network condition with certainty.</p>
<h2 id="review-approvals-as-their-own-action">Review approvals as their own action</h2>
<p>When an application requests permission for a contract to use a token, make that permission understandable. Identify the spender and scope instead of presenting approval as a harmless login step. Do not hide a broad allowance request inside a generic setup button.</p>
<p>Choose the narrowest authorization that satisfies the actual workflow where the implementation supports it. Review how the application behaves when an approval already exists, when it is revoked, or when the contract configuration changes. Avoid assuming that a previously granted permission remains appropriate for every future release.</p>
<p>This is an interface-design responsibility, not a claim that frontend copy can eliminate contract risk. A clear page still needs reviewed application logic and accurate configuration.</p>
<h2 id="publish-a-versioned-frontend-release">Publish a versioned frontend release</h2>
<p>Build the static output, inspect its files, and record the source revision alongside the root CID. Include the expected network and contract configuration in the release record. Verify that the files are retained before changing the public domain or naming pointer.</p>
<p>Keep a previous working frontend available for rollback, but review compatibility before restoring it. A historical interface may expect an older contract configuration or external API. Rolling back the page files does not roll back blockchain state.</p>
<p>Our <a href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/">first IPFS static-site release walkthrough</a> covers the ordinary file and link checks. Apply those checks before testing transaction behavior, so hosting mistakes do not obscure application-level failures.</p>
<h2 id="test-the-uncomfortable-paths">Test the uncomfortable paths</h2>
<p>Test with an unavailable RPC service, a wrong network, a rejected wallet request, a disconnected wallet, and a page reload during a pending action. Use appropriate test environments rather than experimenting with real funds to discover basic interface errors.</p>
<p>Verify that retrying does not accidentally encourage duplicate actions. Preserve enough context to explain an uncertain outcome, and avoid telling users to repeat a transaction immediately when the application has simply lost contact with its observer.</p>
<h3 id="keep-a-release-specific-test-record">Keep a release-specific test record</h3>
<p>Record which release and environment passed each test. A test performed against a development build is not evidence that the exact published bundle contains the same configuration.</p>
<h2 id="conclusion-make-each-trust-boundary-visible">Conclusion: make each trust boundary visible</h2>
<p>An Ethereum frontend on IPFS is most useful when the release identity, browser origin, runtime services, and authorization flow are all explicit. Keep read-only information accessible, separate wallet actions, review configuration, and test failure states before publication. Content-addressed hosting can give the frontend a clear version boundary. It does not replace contract review, secure wallet behavior, or a responsible plan for the services the interface still relies on.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Run IPFS on a VPS: a practical Kubo operations checklist</title>
      <link>https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/</guid>
      <description>Plan a node around administrative boundaries, storage, monitoring, retained releases, and recovery—not just a successful daemon start.</description>
      <pubDate>Sat, 06 Sep 2025 00:00:00 +0000</pubDate>
      <category>Infrastructure</category>
      <content:encoded><![CDATA[<p>Running an IPFS node on a virtual private server is an operations decision, not just an installation exercise. A server that starts Kubo successfully may still have an exposed administrative interface, inadequate storage, no recovery procedure, or a gateway that serves a different purpose from the one you intended. A useful setup begins with the service you want to operate and the risks you are prepared to manage.</p>
<p>This checklist is intended for publishers who understand basic server administration and want to retain their own website releases. It does not assume that one machine is sufficient for every traffic pattern. It also does not present the VPS as a substitute for independent copies or a tested delivery plan. The <a href="https://ipfswebsite.com/ipfs-vps/">IPFS VPS overview</a> summarizes the architecture before you begin.</p>
<h2 id="define-the-node-s-job">Define the node's job</h2>
<p>Decide whether the node is primarily a content provider, a gateway for your own site, an administrative publishing endpoint, or a combination. These roles have different exposure and resource requirements. A server that retains a few approved releases does not need to become an unrestricted public retrieval service by accident.</p>
<p>Write down what must be reachable from outside the machine and why. Include peer connectivity, the public HTTPS endpoint where applicable, and the private administration route. Keep the list small enough that you can explain each exposed interface.</p>
<p>Also define the failure tolerance. If the VPS disappears, what should visitors still be able to retrieve, from where, and who will restore the service? Answering that question first prevents a single-node setup from acquiring an unearned reputation for redundancy.</p>
<h2 id="protect-the-administrative-boundary">Protect the administrative boundary</h2>
<p>Kubo's RPC interface controls the node. It is not the public website gateway. The <a href="https://docs.ipfs.tech/reference/kubo/rpc/">official Kubo RPC reference</a> warns that the API provides administrative access and should not be exposed casually to the public internet. Keep administration private by default, using an appropriate secured access method for your operating environment.</p>
<p>Do not copy a broad bind address into production merely to make a remote tool connect. Review firewall rules, proxy behavior, and authentication as a complete path. A service bound to a loopback address can still be exposed through an incorrectly configured reverse proxy or container mapping.</p>
<p>If you need remote automation, design a narrowly scoped access path and protect its credentials. Never place administrative tokens in the website's HTML, JavaScript, or public deployment files.</p>
<h2 id="plan-storage-around-actual-retention">Plan storage around actual retention</h2>
<p>Estimate the size of the current release, the number of versions you intend to preserve, and the operational headroom required by the node. Then measure growth after deployment. A planning estimate is a starting point, not a promise that disk usage will remain fixed.</p>
<p>Keep a manifest of retained root CIDs and the reason each release remains pinned. Separate active releases, rollback candidates, and long-term archives. This makes maintenance decisions clearer than a repository full of unexplained historical data.</p>
<p>Set alerts before storage is exhausted. Decide who receives them and what action is appropriate. An alert that reaches an abandoned inbox is not a monitoring plan. Document the maintenance window and the procedure for expanding storage or moving the repository when needed.</p>
<h2 id="install-with-an-upgrade-path">Install with an upgrade path</h2>
<p>Use a supported installation method and record the version you deploy. Keep operating-system packages and service configuration understandable to the next administrator. Avoid a collection of one-off shell commands that cannot be reproduced or reviewed later.</p>
<p>Before upgrading, read the release information relevant to your current and target versions. Test against a nonproduction environment when practical, and preserve the data and configuration required by your recovery plan. Do not assume that replacing a binary is the only step a future release will require.</p>
<p>Run the process under an appropriate service account rather than granting it broad privileges without a reason. Ensure that service restarts, logs, and resource limits are managed consistently with the rest of your server environment.</p>
<h2 id="publish-a-gateway-deliberately">Publish a gateway deliberately</h2>
<p>A public gateway is a delivery service with its own traffic and security considerations. If the goal is to serve your own website, review whether the gateway should retrieve arbitrary content or only serve the content you intend to provide. An unrestricted configuration can create an operational role you never budgeted for.</p>
<p>Keep TLS termination and hostname routing explicit. Test the final public hostname, not only a local port on the server. Verify that the proxy forwards the information needed by your chosen gateway configuration and does not accidentally route requests to the administrative API.</p>
<p>Use our <a href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/">DNSLink and custom-domain guide</a> to connect the delivery route to a release. Adding a naming record should be a controlled publishing step, not a substitute for gateway setup.</p>
<h2 id="separate-liveness-from-useful-availability">Separate liveness from useful availability</h2>
<p>A running process is a liveness signal. A successful retrieval of the intended release is an availability signal. Monitor both. A daemon can be healthy while a particular website's content is missing, and a cached homepage can appear healthy while fresh retrieval is failing.</p>
<p>Choose a few meaningful checks: retrieve the root document, a nested page, and an essential asset; confirm an expected release marker; and record response failures with enough detail to identify the layer. Run at least some checks outside the server's own network context.</p>
<p>Avoid making strong uptime claims from a single probe. Use the results to trigger investigation and improve the runbook. Distinguish DNS errors, TLS failures, gateway errors, missing content, and frontend mistakes in your incident notes.</p>
<h2 id="make-pinning-part-of-deployment">Make pinning part of deployment</h2>
<p>A release process should not stop when the files have been added. Record the root CID, confirm retention, and test retrieval before updating the public name. Keep the previous release available until the new one has passed its rollout checks.</p>
<p>A pin manifest is useful only when it matches the content the node can actually serve. Periodically verify representative releases, especially after maintenance, migration, or storage changes. Do not assume a historical deployment log proves that the necessary data is still present.</p>
<p>For a comparison of operating your own node and using managed retention, read <a href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/">IPFS hosting, pinning, and cost planning</a>. The choice is about responsibilities as much as infrastructure.</p>
<h2 id="back-up-what-recovery-needs">Back up what recovery needs</h2>
<p>A backup plan should identify the source project, approved build artifacts, pin manifest, configuration, and any sensitive identity material required by your setup. Protect private material separately from public content. Decide who may access it and how access is recovered when an administrator is unavailable.</p>
<p>Practice restoration rather than checking only that an archive file exists. Bring a replacement environment up, recover a known release, and verify it through the intended delivery route. Record the missing steps while the exercise is still fresh.</p>
<p>Keep independent copies where the consequence of losing the VPS justifies them. Two copies on the same machine do not protect against losing that machine. Likewise, a second provider should not depend entirely on credentials stored only on the original server.</p>
<h2 id="prepare-a-small-incident-runbook">Prepare a small incident runbook</h2>
<p>Write a short response sequence for the failures most likely to interrupt your publishing workflow. Include disk exhaustion, unavailable content, a broken domain mapping, and suspected credential exposure. Record who can change the public pointer and who can restore the previous release.</p>
<p>Use concrete checks and expected outcomes, not instructions such as restart everything. A restart can hide evidence or leave the real cause unresolved. Preserve useful logs without retaining secrets or unnecessary visitor information.</p>
<h3 id="update-the-runbook">Update the runbook</h3>
<p>After an incident, update the runbook and tests with what you learned. The aim is a setup that becomes easier to operate, not a growing collection of undocumented emergency fixes.</p>
<h2 id="conclusion-operate-the-release-path-not-just-the-process">Conclusion: operate the release path, not just the process</h2>
<p>A dependable IPFS VPS setup has clear interfaces, controlled administration, known retained releases, meaningful monitoring, and a practiced recovery path. The daemon is only one component. Start with a narrow role, test what a visitor actually receives, and keep deployment records outside the machine that serves the site. That discipline matters more than treating a successful installation as the end of the job.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Publish a Hugo website on IPFS: URLs, assets, and repeatable builds</title>
      <link>https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/</guid>
      <description>Turn a Hugo project into a portable static release, inspect its generated routes, and keep canonical metadata separate from delivery paths.</description>
      <pubDate>Wed, 28 May 2025 00:00:00 +0000</pubDate>
      <category>Publishing</category>
      <content:encoded><![CDATA[<p>Hugo is a natural fit for a publishing workflow that ends with a static directory. The important part is the output, not the fact that a particular generator produced it. Before publishing to IPFS, inspect the generated pages, resource references, feeds, and navigation as a complete release. A theme that looks correct in development may still assume a domain root or load resources from a service you did not intend to depend on.</p>
<p>This walkthrough concentrates on decisions that are easy to miss: the canonical domain, the delivery context, reproducible output, nested page testing, and release retention. It assumes you already have a Hugo project that builds successfully. For a broader introduction, visit the <a href="https://ipfswebsite.com/ipfs-hugo-website/">IPFS Hugo website guide</a>.</p>
<h2 id="start-from-the-generated-directory">Start from the generated directory</h2>
<p>Your Hugo source project contains content, layouts, configuration, and possibly theme modules. Visitors do not need all of that material. They need the generated HTML, stylesheets, scripts, and media. Keep the publish directory separate from the source directory so that you can inspect exactly what will be distributed.</p>
<p>Use a clean output directory for each release. Otherwise, an old article or unused image can remain from an earlier build even after you remove it from the current source. Review the actual folder before publication, especially when you have renamed routes or changed a theme.</p>
<p>A typical production build may use <code>hugo --minify</code>, but the correct command depends on your project and installed version. Record the command you actually use rather than copying a build recipe you have not tested.</p>
<h2 id="define-the-canonical-site-address">Define the canonical site address</h2>
<p>The canonical address is the preferred public identity of your site, including its scheme and trailing slash. It affects the expectations of feeds, sharing metadata, and search-engine signals. Do not replace it casually with a temporary gateway address just to make one stylesheet load.</p>
<p>Hugo's <code>baseURL</code> setting describes the published site's absolute URL. Review the <a href="https://gohugo.io/configuration/all/">official Hugo configuration reference</a> when setting it, and inspect your theme's use of URL helpers. A theme can combine relative resources, absolute links, and hardcoded values in ways that a single configuration switch will not fix.</p>
<p>For a domain-based deployment, the canonical address can remain your branded HTTPS domain while a separate IPFS copy provides a content-addressed release. Document that choice so later maintainers do not mistake intentional metadata for a broken internal link.</p>
<h2 id="understand-the-delivery-context">Understand the delivery context</h2>
<p>A website served at a domain root has a different path context from one served beneath a gateway's CID path. A leading slash in an asset URL points to the origin root, not necessarily to the root of your release folder. This is why a page can load successfully while its styles disappear.</p>
<p>Do not assume that enabling relative URLs automatically makes every theme feature portable. Check pagination, taxonomy pages, image processing, shortcodes, module imports, and any script that constructs links. URL-rewriting settings have tradeoffs and should be tested against the generated output rather than enabled as a universal solution.</p>
<p>Create a small delivery matrix: conventional domain, intended gateway context, and a nested content page. Mark which environments you actually support. A precise support statement is more valuable than an untested promise that every gateway works identically.</p>
<h2 id="give-routes-real-output-files">Give routes real output files</h2>
<p>Prefer directory-based page output when you want extensionless public links. A guide route should correspond to a directory with its own entry document. Verify the generated result, including the category and tag pages your theme creates. Do not assume that a route seen in development will exist as a physical page in the production folder.</p>
<p>If your site uses client-side routing, review direct navigation and reload behavior separately. A static file server cannot be expected to recreate a development server's fallback rules. For a content-oriented Hugo site, ordinary generated pages are often easier to inspect and operate.</p>
<p>Our <a href="https://ipfswebsite.com/ipfs-static-website/">IPFS static website architecture page</a> covers directory routes and portable linking without requiring a particular generator. Use it as an output checklist rather than changing your entire authoring workflow.</p>
<h2 id="audit-resources-and-external-dependencies">Audit resources and external dependencies</h2>
<p>Inspect the generated HTML for scripts, fonts, images, and stylesheets loaded from remote hosts. Some dependencies are intentional. Others arrived with a theme and no longer serve a purpose. Decide which are essential before claiming that your published folder contains the complete site.</p>
<p>Keep image dimensions explicit and use meaningful alternative text. A content-addressed distribution path does not make a large image cheaper for a visitor to download. Optimize the actual media files, and test the layout when images load slowly or are unavailable.</p>
<p>Check CSS references too. A background image path is resolved in relation to the stylesheet's location, which may differ from the HTML page's location. Inspect built bundles rather than searching only the original templates.</p>
<h2 id="treat-feeds-and-search-metadata-as-output">Treat feeds and search metadata as output</h2>
<p>Read the generated RSS feed and sitemap as carefully as the homepage. Confirm that article links use the preferred canonical domain and clean routes. Verify that publication dates match the article pages and that draft or future content has not leaked into the release.</p>
<p>Do not automatically label every article as recently modified because the site was rebuilt. A build event and an editorial change are different facts. Choose a modification-date policy that reflects your content history, or omit optional modification fields when you lack reliable evidence.</p>
<p>Check page titles and descriptions for duplicates introduced by shared templates. A consistent brand suffix is useful; a hundred pages with the same entire title are not. Search visibility begins with accurately describing the content that is actually present.</p>
<h2 id="keep-builds-repeatable">Keep builds repeatable</h2>
<p>Record the Hugo version, theme revision, dependency versions, and build command for an approved release. Store your lockfiles and configuration with the source. Avoid fetching an unpinned theme branch during every production build and expecting the resulting directory to remain identical.</p>
<p>Also investigate changing timestamps, random identifiers, or build-time widgets that alter output even when editorial content has not changed. Reproducibility is useful because it makes unexpected differences easier to spot. It is not a reason to suppress genuine updates or freeze security fixes indefinitely.</p>
<p>Keep a release manifest outside the public content if it contains private operational details. The public website does not need your deployment credentials, internal hostnames, or administrator notes.</p>
<h2 id="publish-and-test-the-root-release">Publish and test the root release</h2>
<p>Once the output is approved, add the generated directory to IPFS and record its root CID. Confirm the retention arrangement before changing a domain pointer. Test a deep article, a taxonomy page, an image, a stylesheet, and the feed through the intended delivery route.</p>
<p>Run the same checks after changing DNSLink or your conventional host. A successful upload and a successful public release are separate milestones. Keep the prior release available until your rollback window ends.</p>
<p>For the surrounding process, read <a href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/">connecting DNSLink and HTTPS delivery</a>. It explains why the domain mapping should follow verification rather than lead it.</p>
<h2 id="troubleshoot-with-the-smallest-failing-page">Troubleshoot with the smallest failing page</h2>
<p>When something breaks, identify one representative failure and inspect its generated HTML. Is the resource path wrong? Does the referenced file exist? Is an external request blocked? Is the theme expecting a runtime service? Reduce the problem before changing global configuration.</p>
<h3 id="keep-a-regression-page">Keep a regression page</h3>
<p>A small test page with one image and one stylesheet can isolate a path problem quickly. Once it works in the required delivery contexts, apply the same pattern to the theme and rerun the full site checks. Keep the regression test so a future theme update does not reintroduce the issue.</p>
<h2 id="conclusion-trust-the-output-you-tested">Conclusion: trust the output you tested</h2>
<p>Publishing Hugo on IPFS is a release-engineering task built around ordinary static files. Choose a canonical identity, test real routes and assets, keep builds understandable, and retain the approved directory before advertising its CID. The result is not a new kind of authoring system. It is a familiar publishing workflow with a clearer boundary between the source project, the finished release, and the path readers use to retrieve it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>IPFS hosting, pinning, and costs: plan the whole delivery path</title>
      <link>https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/</guid>
      <description>Compare local nodes, managed pinning, and gateway delivery without treating an upload or a cached page as an availability guarantee.</description>
      <pubDate>Tue, 14 Jan 2025 00:00:00 +0000</pubDate>
      <category>Infrastructure</category>
      <content:encoded><![CDATA[<p>Choosing IPFS hosting is easier when you stop treating hosting as a single purchase. A website needs its content retained, its content discoverable and retrievable, and its pages delivered through an interface visitors can use. Sometimes one provider packages those jobs together. Sometimes you operate separate components. A useful comparison starts by writing down the jobs, not by comparing the largest storage number on a pricing page.</p>
<p>Consider a small publisher with a mostly static website, weekly updates, and an audience that uses ordinary browsers. The publisher needs a dependable public address, a way to preserve approved releases, and someone who can diagnose failures. This article develops a planning method for that situation. It does not assume a particular provider, quote changing prices, or suggest that IPFS has a universal hosting tariff.</p>
<h2 id="separate-storage-from-delivery">Separate storage from delivery</h2>
<p>Pinning is a retention decision made by a node or service. Gateway delivery is the HTTP route through which many visitors retrieve the retained content. Naming is the layer that lets visitors use a readable address rather than memorize a release identifier. All three matter, but none should be used as a substitute for the others.</p>
<p>The <a href="https://docs.ipfs.tech/concepts/persistence/">official IPFS persistence documentation</a> explains how pins protect content from garbage collection and why availability still requires retained, reachable copies. Use that distinction when reading a vendor's proposal. A storage allowance does not automatically describe gateway capacity, and a responsive gateway does not tell you who will preserve the next release.</p>
<p>Our <a href="https://ipfswebsite.com/ipfs-website-hosting/">IPFS website hosting overview</a> maps these responsibilities before you compare implementation choices.</p>
<h2 id="option-one-operate-your-own-node">Option one: operate your own node</h2>
<p>Running your own node gives you direct control over the repository, pinset, and operating environment. That control can be valuable when you already maintain servers and want a clear relationship between your release process and retained files. It also means that patching, storage planning, monitoring, and incident response become your responsibility.</p>
<p>Start with the question of who will respond when the node stops. A laptop that goes to sleep is a useful development environment, not a complete unattended availability plan. A virtual server can remain online more consistently, but it still depends on its host, network, disk, configuration, and administrator.</p>
<p>Budget for the work as well as the machine. Include restore drills, independent checks, operating-system updates, and a replacement procedure. Our <a href="https://ipfswebsite.com/ipfs-vps/">IPFS VPS guide</a> focuses on those responsibilities rather than promising that a particular server size fits every site.</p>
<h2 id="option-two-use-managed-pinning">Option two: use managed pinning</h2>
<p>A managed pinning service can remove part of the node-operation workload. Your questions then shift toward the service boundary. What exactly is retained? How are recursive pins reported? What happens when an upload is queued, fails, or exceeds a plan limit? How do you export the list of releases you expect to remain available?</p>
<p>Ask whether the service's dashboard status represents completed replication or merely an accepted request. Plan a verification step after each upload instead of assuming the API's first response means the release is ready to announce. Save the resulting CID in records you control.</p>
<p>Before committing a production workflow, run a migration exercise. Take an approved release, make it available through another retention arrangement, and verify its nested assets. Portability is most convincing when tested before you need it, not when an account is already suspended or a provider is unavailable.</p>
<h2 id="option-three-combine-independent-copies">Option three: combine independent copies</h2>
<p>A second copy can reduce dependence on a single operating environment, but independence needs examination. Two dashboards may ultimately depend on the same cloud region, billing owner, or credential store. Two gateways might retrieve from the same only available provider. More logos in an architecture diagram do not automatically mean more resilient delivery.</p>
<p>Create a small dependency inventory. Record the operator of each retained copy, the location of the release records, the account responsible for payment, and the delivery route used by visitors. Then identify failures that would affect both copies at once. This is a planning exercise, not a claim that every site needs a complex distributed infrastructure.</p>
<p>For a personal site, a simple, well-tested second copy may be enough. For an application interface used to authorize transactions, the recovery and verification requirements deserve a more formal review.</p>
<h2 id="build-a-cost-model-you-can-explain">Build a cost model you can explain</h2>
<p>Use categories before numbers. Separate retained storage, requests, outgoing bandwidth, build automation, domain services, backups, and operator time. Check whether limits are measured per account, project, gateway, or billing period. Also check what happens at the limit: throttling, overage charges, rejected uploads, or a service interruption are different outcomes.</p>
<p>An illustrative calculation can help organize the questions. If an assumed page transfer is two megabytes and you model ten thousand visits, the arithmetic starts around twenty gigabytes before caching, repeat visits, or other traffic. Those are hypothetical inputs, not a traffic forecast or a provider quotation. Replace them with measurements from your own release and your audience assumptions.</p>
<p>Do not multiply the full site size by every visitor unless visitors actually download the whole site. Measure a representative journey instead: homepage, article, shared assets, and any third-party requests. State which costs remain unknown.</p>
<h2 id="account-for-release-retention">Account for release retention</h2>
<p>A website changes over time. Keeping one release and keeping a year of weekly releases are different retention policies. Some underlying blocks may be shared between versions, but your planning should not assume a particular provider bills only the incremental difference. Confirm how its plan measures stored data.</p>
<p>Decide which versions are operational rollbacks and which are long-term archives. Keep a small manifest linking each source revision to its root CID and retention purpose. Remove obsolete copies only after checking that they are not needed by a published link or a recovery plan.</p>
<p>If a release accidentally includes private information, changing the public pointer does not undo previous distribution. Treat prepublication review as part of your hosting process. Availability planning and data-minimization planning belong together.</p>
<h2 id="measure-retrieval-rather-than-dashboard-comfort">Measure retrieval rather than dashboard comfort</h2>
<p>Create a test page with a few representative assets and a nested route. Measure it from the environment your visitors are likely to use. Keep first retrieval separate from repeat retrieval, because a warm cache can make an unhealthy upstream path look reassuring.</p>
<p>Monitor a meaningful response, not just whether a hostname answers. For example, verify that the page contains the expected release marker and that an important stylesheet can be fetched. Distinguish a DNS failure, gateway failure, unavailable content, and broken frontend code. Those problems need different owners.</p>
<p>Our <a href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/">gateway and custom-domain walkthrough</a> explains why changing a naming record and operating HTTPS delivery are separate tasks.</p>
<h2 id="ask-about-the-exit-before-the-entrance">Ask about the exit before the entrance</h2>
<h3 id="how-to-leave-a-provider">How to leave a provider</h3>
<p>Before making a provider central to your workflow, document how to leave. Keep source files, build instructions, release artifacts, and pin manifests outside a single dashboard. Verify that another operator can rebuild or recover the public site without guessing which folder was uploaded.</p>
<p>Review billing contacts and access recovery too. A technically redundant setup can still fail when every account depends on an unavailable person. Grant only the access each publishing step needs, and keep credentials out of the website bundle.</p>
<p>An exit plan need not be elaborate. A clear artifact archive, an independently stored list of root CIDs, and a tested handoff can be more useful than a long document no one has exercised.</p>
<h2 id="conclusion-buy-or-operate-defined-responsibilities">Conclusion: buy or operate defined responsibilities</h2>
<p>The right IPFS hosting arrangement is the one whose responsibilities match your publishing needs and operational capacity. Compare retention, delivery, naming, recovery, and cost measurement separately. Run a small test, inspect the limits, and practice moving a release. You do not need invented uptime figures or universal price estimates to make progress. You need a delivery path you understand and a credible plan for keeping its content reachable.</p>
]]></content:encoded>
    </item>
    <item>
      <title>DNSLink and IPFS gateways: connect a domain without breaking releases</title>
      <link>https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/</guid>
      <description>Understand what DNSLink changes, what HTTPS delivery still needs, and how to test a custom domain before switching its published release.</description>
      <pubDate>Wed, 23 Oct 2024 00:00:00 +0000</pubDate>
      <category>Infrastructure</category>
      <content:encoded><![CDATA[<p>A content identifier is useful for identifying a website release, but it is not an address most visitors will remember. A domain name solves the human side of that problem. Connecting the two requires care because a readable name, an HTTP gateway, a TLS certificate, and a retained release are separate pieces of the delivery path. Changing one does not automatically configure the others.</p>
<p>This guide follows a publisher who already has a working IPFS release and wants to share it under a familiar domain. The goal is a predictable deployment process: prepare the new release, verify it, change the naming layer, and keep a recovery path. Begin with the <a href="https://ipfswebsite.com/ipfs-hosting/">IPFS hosting architecture overview</a> if these components are still unfamiliar.</p>
<h2 id="understand-the-two-addresses">Understand the two addresses</h2>
<p>A CID identifies content. A domain name is a human-readable name whose configuration can change. A useful release process preserves that distinction: keep the CID as a record of an approved build, and use the domain as the public entry point to whichever release is currently approved.</p>
<p>Do not treat the domain as evidence that the browser has independently verified the underlying content. A conventional HTTPS connection authenticates a connection to the domain's server according to the browser's trust model. The way content is retrieved and verified depends on the client and gateway architecture. Be precise about that boundary when describing your site.</p>
<p>A sensible operational record contains both addresses. This lets someone investigate whether a failure belongs to the intended content or to the naming and delivery path around it.</p>
<h2 id="what-dnslink-actually-publishes">What DNSLink actually publishes</h2>
<p>DNSLink uses a DNS TXT record to associate a name with an IPFS path or an IPNS name. For a direct release mapping, the record has the general form <code>dnslink=/ipfs/</code> followed by the release's actual root CID. The TXT record is associated with a hostname prefixed by <code>_dnslink</code>.</p>
<p>For example, the record name for this site's domain would be <code>_dnslink.ipfswebsite.com</code>. The value must use the CID of the release you actually intend to publish; do not copy an abbreviated identifier from a screenshot. The <a href="https://docs.ipfs.tech/how-to/websites-on-ipfs/custom-domains/">official custom-domain and DNSLink guide</a> explains the distinction between signaling a CID and serving a website directly over HTTPS.</p>
<p>That distinction is the key to avoiding a common misunderstanding. Adding the TXT record does not, by itself, cause every ordinary browser to retrieve the website from IPFS.</p>
<h2 id="decide-how-https-visitors-arrive">Decide how HTTPS visitors arrive</h2>
<p>A visitor who types your domain into a conventional browser still needs a working HTTPS delivery route. You can operate a compatible gateway behind a reverse proxy, or serve the same static release through conventional hosting while publishing its DNSLink mapping separately. The operational choices differ, even when the website files are identical.</p>
<p>Write the chosen arrangement in one sentence. For example: the public domain serves the tested static build, while DNSLink signals the corresponding retained IPFS release. That sentence is more useful than a vague claim that the website is completely decentralized.</p>
<p>Check domain routing, certificate handling, and the gateway's supported configuration before making changes. Avoid assuming that a DNS provider's proxy mode or a hosting provider's custom-domain feature behaves the same way as another provider's implementation.</p>
<h2 id="choose-the-right-gateway-context">Choose the right gateway context</h2>
<p>An HTTP URL's origin matters to browser storage, permissions, and script isolation. Sites served beneath different paths of the same hostname can share an origin. For application interfaces, plan a dedicated origin through an appropriate subdomain or DNSLink gateway arrangement rather than treating every public path gateway as interchangeable.</p>
<p>This is particularly important when your frontend connects to a wallet or stores preferences. Hosting a static bundle does not remove ordinary browser-security questions. Document which origin your application expects and what happens when the same files are opened under another gateway's domain.</p>
<p>Our <a href="https://ipfswebsite.com/ipfs-website-dapp/">IPFS website dApp guide</a> explains why frontend delivery and transaction authorization should be tested as separate layers. For a simple content site, the same origin review is still useful when you add scripts later.</p>
<h2 id="test-paths-before-pointing-the-domain">Test paths before pointing the domain</h2>
<p>Build a staging checklist that exercises a nested article, an image, a stylesheet, and a link back to the homepage. Test through the actual delivery pattern you intend to use. A domain-root site and a website mounted beneath a CID path can expose different mistakes in absolute and relative links.</p>
<p>Keep browsing links distinct from canonical metadata. Browsing links should keep a visitor within a coherent release. Canonical URLs should identify the preferred public version you want search engines to consider. Neither should be changed accidentally by a deployment script that performs a broad text replacement.</p>
<p>Also inspect redirects. A site can appear to work because every click quietly sends the visitor back to conventional hosting. That may be a deliberate architecture choice, but it is not evidence that the IPFS copy is self-contained.</p>
<h2 id="prepare-the-release-before-changing-dns">Prepare the release before changing DNS</h2>
<p>First build the new folder, add it to IPFS, and record its root CID. Then confirm that the intended retention arrangement has completed its work. Open the release through an independent retrieval route and run your navigation checks. Only after those checks pass should the public naming record change.</p>
<p>This ordering reduces the chance of advertising a release that has not become retrievable yet. Keep the old release retained while the new mapping is being adopted. Different resolvers and clients can observe updates at different times, so a transition period should be part of the plan rather than a surprise.</p>
<p>Record the previous and new values in a release log. Include the source revision and the person or automation responsible for the change. Do not place DNS management credentials in that log or in the public website.</p>
<h2 id="diagnose-each-layer-separately">Diagnose each layer separately</h2>
<p>When a custom domain fails, start with a concrete observation. Does the hostname resolve? Does HTTPS establish successfully? Does the response contain the intended page? Can the same release be retrieved through another route? Does the nested stylesheet load? Each answer narrows the problem.</p>
<p>A command such as <code>dig +short TXT _dnslink.ipfswebsite.com</code> can inspect the published DNSLink value, but the result alone does not establish that HTTPS delivery is working. Likewise, a healthy homepage does not establish that every file in its release is available.</p>
<p>Save the time and exact error from a failed check. For content retrieval, distinguish a timeout from a missing path. For naming, compare the intended record with the observed record. Troubleshooting becomes much faster when the report identifies a layer rather than declaring IPFS broken.</p>
<h2 id="design-a-rollback-that-can-be-executed">Design a rollback that can be executed</h2>
<p>A rollback should restore a known, available release. Save the previous CID and verify that its files remain retained before you need them. If your conventional host and DNSLink record are managed separately, document how to bring both back to the same release.</p>
<h3 id="exercise-the-rollback">Exercise the rollback</h3>
<p>Practice the process on a noncritical change. Someone other than the original developer should be able to identify the intended release and reverse the naming update. If rollback requires guessing which build directory was used, the release record is incomplete.</p>
<p>Do not confuse rollback with erasure. Old content may remain accessible wherever it was copied or retained. Review sensitive material before publishing rather than relying on a future pointer change to remove it.</p>
<h2 id="conclusion-names-are-part-of-the-release-system">Conclusion: names are part of the release system</h2>
<p>A good IPFS custom-domain setup is not just a TXT record. It is a tested relationship among a readable name, a delivery route, an approved CID, and retained content. Keep those responsibilities explicit, change the public pointer last, and preserve a working rollback. With that discipline, a domain becomes a useful publishing interface instead of an extra source of uncertainty around every release.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Build your first IPFS static website: from folder to CID</title>
      <link>https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/</guid>
      <description>Prepare a portable static site, publish the right directory, and check that every page and asset survives the move to IPFS.</description>
      <pubDate>Fri, 07 Jun 2024 00:00:00 +0000</pubDate>
      <category>Getting started</category>
      <content:encoded><![CDATA[<p>An IPFS website starts with an ordinary publishing question: which files should a visitor receive? Before thinking about wallets, tokens, or distributed infrastructure, assemble a complete website that works as a folder. HTML provides the pages, CSS provides the presentation, and a small amount of JavaScript can provide navigation. The useful change is how that folder is addressed and retrieved, not a requirement to replace familiar web development.</p>
<p>This guide follows a small documentation site through its first release. The aim is not to promise that a successful upload makes a website permanent. The aim is to produce a release you can identify, keep available, test independently, and replace deliberately. For the underlying vocabulary, start with our <a href="https://ipfswebsite.com/ipfs-website/">IPFS website overview</a>.</p>
<h2 id="1-define-a-static-release">1. Define a static release</h2>
<p>A static release contains the files that a server or gateway sends directly to a browser. It does not need a running application process to generate each page. If your project currently depends on server rendering, a database query at request time, or a server-only login handler, exporting the source repository is not enough. You need an actual static build, and any remaining external services must be documented separately.</p>
<p>Write a small acceptance statement before building: a visitor can open the homepage, navigate to the guide, view the images, and find the contact details with no account. That statement keeps your first release focused. A site with three finished pages is a better test than a large shell full of buttons that have no destination.</p>
<h2 id="2-give-every-page-a-real-directory">2. Give every page a real directory</h2>
<p>Use a folder layout with an entry document at each route. Your homepage lives in the root; the guide has its own directory; images and styles have predictable locations. For example:</p>
<pre><code class="language-text">site/
  index.html
  guides/
    index.html
  about/
    index.html
  assets/
    style.css
    network.png
</code></pre>
<p>The public links can be <code>guides/</code> and <code>about/</code>, without HTML extensions. A directory-based site avoids assuming that a gateway will apply your old server's rewrite rules. It also makes failures easier to investigate: a missing guide is a missing file, not a mystery involving application routing.</p>
<p>Keep the deployment directory separate from your working repository. Never publish environment files, private drafts, access tokens, or source maps containing sensitive material simply because they sit beside your application code.</p>
<h2 id="3-make-links-work-away-from-the-origin-root">3. Make links work away from the origin root</h2>
<p>A link beginning with a slash starts at the host's root. That is convenient on a conventional domain but can escape a website mounted beneath a gateway path. A page under an IPFS content path may need a relative link that stays inside its release directory. From a nested guide, the stylesheet could be referenced as <code>../assets/style.css</code>.</p>
<p>Do not fix only the navigation. Inspect image sources, CSS background images, JavaScript imports, downloadable files, and dynamically constructed links. Test a nested page directly rather than reaching it only from the homepage. A root page can look perfect while every deep link is broken.</p>
<p>Canonical URLs serve a different purpose from browsing links. You can retain a preferred branded HTTPS address in search metadata while making the actual page-to-page links portable. See the <a href="https://ipfswebsite.com/ipfs-static-website/">static website guide</a> for this separation.</p>
<h2 id="4-build-then-inspect-the-actual-output">4. Build, then inspect the actual output</h2>
<p>Run your normal production build before adding anything to IPFS. Compile your stylesheet locally rather than depending on a development-only styling script in the browser. Remove unused sample images, temporary downloads, and development dependencies from the output folder. Check that the release does not fetch its entire visual identity from an unrelated third-party asset server.</p>
<p>Open the output through a local HTTP server. Double-clicking files is not an equivalent test of directory routing or browser security behavior. Inspect the browser's network panel for missing resources, unexpected remote requests, and development URLs. Try the menu with a keyboard, increase text size, and use a narrow viewport. These are ordinary website checks that become especially valuable before publishing a content-addressed release.</p>
<h2 id="5-add-the-directory-and-record-its-address">5. Add the directory and record its address</h2>
<p>With Kubo installed and initialized, a typical local command for a directory is:</p>
<pre><code class="language-sh">ipfs add -r --cid-version=1 ./site
</code></pre>
<p>The output contains identifiers for individual files and the containing directory. Record the directory's CID, not just the identifier of the homepage file. The directory is what preserves the relationships among pages and assets. For the reference workflow and directory behavior, consult the <a href="https://docs.ipfs.tech/how-to/websites-on-ipfs/multipage-website/">official IPFS multi-page website tutorial</a>.</p>
<p>Treat the result as a release artifact. Save the source revision, build command, tool versions, and resulting root CID together in your own release notes. Do not hand-edit the published folder afterward and assume the record still describes it. A changed build needs its own recorded identity.</p>
<h2 id="6-make-availability-an-explicit-task">6. Make availability an explicit task</h2>
<p>An address is not an availability contract. Arrange for the directory and its reachable content to remain pinned on infrastructure that will stay online. You might operate your own node, use a pinning provider, or combine independent copies. Whichever arrangement you choose, record who is responsible for retaining it and how you will notice a failure.</p>
<p>Do not confuse a browser cache with durable hosting. A cached page may continue opening on your laptop while a new visitor cannot retrieve it. Test from a separate environment that has not just uploaded the files. For a more complete operational plan, read <a href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/">how IPFS hosting and pinning fit together</a>.</p>
<h2 id="7-verify-the-release-as-a-visitor">7. Verify the release as a visitor</h2>
<p>Open the root through your intended delivery route. Then open a nested page in a new tab, reload it, and follow links back to the homepage. Confirm that a deliberately nonexistent route fails rather than silently showing unrelated content. Check image dimensions and inspect the console for missing modules or blocked requests.</p>
<h3 id="hand-the-release-to-another-reader">Hand the release to another reader</h3>
<p>Use a second retrieval route as a diagnostic comparison, not as proof of universal availability. One gateway may have a warm cache, while another is doing a fresh lookup. If retrieval differs, investigate the provider and delivery paths separately. Keep the exact URL, time, and error message; those details are more useful than a report that the website is simply down.</p>
<h2 id="8-publish-a-name-only-after-testing">8. Publish a name only after testing</h2>
<p>A readable name makes a site easier to share, but it should point to a release that has already passed inspection. Plan your custom domain and HTTPS delivery independently from the content's CID. Update the naming layer only after the new release is available. Keep the previous working release until your rollback window has passed.</p>
<p>When a deployment breaks, a useful rollback restores both the intended pointer and the files required by that release. Saving an old CID is not enough if its content is no longer retained. Our <a href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/">DNSLink and gateway guide</a> walks through that operational boundary.</p>
<h2 id="a-practical-first-release-checklist">A practical first-release checklist</h2>
<p>Before calling the release finished, ask someone who did not build it to use it. Give that person a direct link to a nested page. Ask them to find the homepage, open an image, locate contact details, and navigate without a mouse. Watch for assumptions you no longer notice because you know the site so well.</p>
<p>Write down the expected outcomes and the actual results. A small checklist becomes a reusable release test rather than a one-time memory. Include the root CID, the location of retained copies, the canonical domain, and the previous release. Keep private deployment credentials out of that public checklist.</p>
<h2 id="conclusion-publish-a-release-not-just-an-upload">Conclusion: publish a release, not just an upload</h2>
<p>Your first IPFS static website is successful when its files are complete, its links are portable, its content can be retrieved, and its next update has a clear path. None of those tasks requires a token or an elaborate application stack. Begin with a small static folder, verify its directory CID, and give availability an owner. That approach creates a foundation you can later extend with Hugo, a CMS, or a carefully designed dApp frontend.</p>
]]></content:encoded>
    </item>
    <item>
      <title>An IPFS website CMS workflow: edit privately, publish static releases</title>
      <link>https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/</guid>
      <description>Design a content workflow that separates authoring, previews, approvals, static output, and IPFS publication without exposing the CMS to every visitor.</description>
      <pubDate>Mon, 19 Feb 2024 00:00:00 +0000</pubDate>
      <category>Publishing</category>
      <content:encoded><![CDATA[<p>A content management system and IPFS can work together without turning the public website into a live editing application. The useful boundary is between authoring and delivery. Editors create and review content in one environment. A build process turns approved material into static files. Those files become the release distributed through IPFS and, where appropriate, conventional HTTPS hosting.</p>
<p>This architecture suits publishers who want a familiar editorial workflow while keeping the public site lightweight. It does not mean that a CMS automatically runs on IPFS, or that login, permissions, and drafts become decentralized simply because the finished pages are content-addressed. Start by defining which part of the publishing system you are actually moving.</p>
<h2 id="separate-four-jobs">Separate four jobs</h2>
<p>The authoring system stores editable content and controls who can change it. The build system converts approved content into public files. The retention system keeps a release available. The delivery system serves it to readers. A single vendor may package several jobs together, but the boundaries still matter when you diagnose failures or change providers.</p>
<p>Draw the workflow as a sequence of artifacts: source content, reviewed revision, generated directory, root CID, public pointer. Make it possible to identify which revision produced each release. If someone asks why an old price or outdated paragraph is visible, the answer should not depend on reconstructing an editor's browser history.</p>
<p>Our <a href="https://ipfswebsite.com/ipfs-website-cms/">IPFS website CMS overview</a> provides a shorter architectural introduction to these responsibilities.</p>
<h2 id="choose-an-authoring-model-deliberately">Choose an authoring model deliberately</h2>
<p>A Git-based CMS stores editorial changes in a repository and can fit naturally into review and build workflows. A hosted headless CMS typically exposes content through an API that your build process reads. A traditional CMS may also work when it can export a complete static representation. These are different integration models, not interchangeable product labels.</p>
<p>As one concrete example, the <a href="https://decapcms.org/docs/intro/">Decap CMS overview</a> describes a Git-based approach that works with static-site generators. That example illustrates the separation between content editing and generated delivery; it is not a requirement to choose Decap or a claim that every editorial feature will work unchanged in your environment.</p>
<p>Compare the models against your real needs: draft review, image handling, multiple authors, localization, content export, and access recovery. Avoid adding a complex editing platform when a small repository already meets the team's needs.</p>
<h2 id="design-the-content-model-before-the-page-template">Design the content model before the page template</h2>
<p>Define the fields an editor must provide. An article might need a title, slug, excerpt, body, featured image, alternative text, publication date, category, and related topics. Decide which fields are required and which can be omitted. Validate them before the build produces public files.</p>
<p>A good content model prevents predictable mistakes. For example, a slug should not contain arbitrary path traversal, and an image should not silently lose its descriptive text. A publication date should not accidentally place an unfinished draft into a public feed. Keep these rules understandable to editors rather than hiding all validation behind an unexplained failed build.</p>
<p>Treat taxonomies as editorial tools, not automatic SEO decoration. Create categories and tags when they help a reader discover useful related material. Avoid generating empty archives or dozens of one-post labels without a clear purpose.</p>
<h2 id="keep-drafts-out-of-the-published-directory">Keep drafts out of the published directory</h2>
<p>Drafts may contain unverified claims, private contact details, embargoed information, or material that never receives approval. Do not publish the CMS database or the full source directory simply because doing so is convenient. The deployment artifact should contain only the files intended for readers.</p>
<p>Preview environments deserve their own review. A preview URL that is merely difficult to guess is not equivalent to access control. Decide whether previews may be public and how the team will handle sensitive content. If privacy matters, enforce it in the authoring and preview environment rather than assuming an obscure CID is secret.</p>
<p>Before release, inspect the output for draft filenames, unused media, source maps, environment files, and accidentally exported administrator pages. Removing a public pointer later is not a reliable way to retract copies already distributed.</p>
<h2 id="build-content-into-pages-not-runtime-promises">Build content into pages, not runtime promises</h2>
<p>For a fully static public site, fetch approved CMS content during the build and render it into the delivered HTML. This gives each route a complete document rather than requiring every reader's browser to assemble the page from a live content API. It also gives you a concrete artifact to inspect before publication.</p>
<p>Some projects intentionally fetch content at runtime. That can be appropriate, but it creates a continuing dependency on the API, its credentials model, rate limits, and availability. Describe that architecture accurately instead of presenting the public site as independent of the CMS.</p>
<p>For this type of publishing workflow, prefer a finished page over a blank shell wherever possible. Our <a href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/">Hugo publishing walkthrough</a> shows how a generator's output can become the release boundary.</p>
<h2 id="keep-credentials-on-the-authoring-side">Keep credentials on the authoring side</h2>
<p>A browser-delivered bundle is not a safe home for private CMS tokens, pinning credentials, DNS management tokens, or administrator passwords. Review both obvious configuration files and compiled JavaScript. A variable's name or a frontend framework's environment convention does not make its value secret once it is shipped to visitors.</p>
<p>Give each automation step only the access it requires. A content-reading build should not automatically receive permission to change DNS. A preview job should not automatically be allowed to publish a production release. Separating these permissions makes mistakes easier to contain.</p>
<p>Keep deployment logs useful without printing credentials or private content. Include revision identifiers, build outcomes, artifact locations, and the approved root CID. Those details support troubleshooting without turning logs into another data leak.</p>
<h2 id="make-approval-a-real-transition">Make approval a real transition</h2>
<p>Define what happens between preview and publication. An editor approves the content; a build verifies the output; a release process retains the artifact; and only then does the public pointer change. These can be automated steps, but their order should remain visible.</p>
<p>Avoid an arrangement in which saving a draft silently updates the production domain. Also avoid one in which the CMS reports publication while the build has failed. The editorial interface should distinguish saved, approved, built, and live states, even when a small team manages them through a simple checklist.</p>
<p>Assign an owner to failures at each transition. A writer should know whether to fix a missing field, ask a developer about a build error, or contact an operator about retrieval.</p>
<h2 id="test-media-archives-and-feeds-together">Test media, archives, and feeds together</h2>
<h3 id="check-the-wider-publication">Check the wider publication</h3>
<p>An article can render correctly while its category archive, social image, or RSS entry is wrong. Treat those outputs as part of the same editorial release. Check that publication dates, titles, canonical links, and excerpts remain consistent across them.</p>
<p>Keep images in a predictable directory and verify that every referenced asset exists. Test nested routes through the intended IPFS delivery context. A CMS may generate absolute media URLs that bypass your static release, so inspect those references explicitly.</p>
<p>When content is renamed, review incoming internal links and old public routes. Do not assume a generator creates redirects automatically. A simple content inventory can reveal broken relationships before readers encounter them.</p>
<h2 id="plan-deletion-and-rollback-honestly">Plan deletion and rollback honestly</h2>
<p>A rollback returns readers to a previously approved release; it does not erase the release that came after it. A deletion from the CMS source similarly does not guarantee deletion from copies of earlier public artifacts. Explain that distinction to editors before they publish material that may require withdrawal.</p>
<p>Keep approved artifacts and revision records according to a deliberate retention policy. Avoid retaining sensitive drafts merely because your release archive stores everything by default. If the workflow needs stronger confidentiality guarantees, solve that requirement before distribution.</p>
<h2 id="conclusion-keep-editing-and-delivery-connected-not-entangled">Conclusion: keep editing and delivery connected, not entangled</h2>
<p>An effective IPFS CMS workflow gives editors clear states and gives operators a complete static artifact. Model the content, protect drafts and credentials, validate all generated outputs, and change the public pointer only after retention and testing. The result is a publishing system that can evolve on the authoring side without making every reader depend on the CMS's live application stack.</p>
]]></content:encoded>
    </item>
    <item>
      <title>IPFS Website Guide | IPFSwebsite.com</title>
      <link>https://ipfswebsite.com/ipfs-website/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/ipfs-website/</guid>
      <description>Understand CIDs, static files, and the release process behind an IPFS website.</description>
      <content:encoded><![CDATA[<section class="topic-hero wrap"><div><p class="eyebrow">IPFS Website / START HERE</p><h1>A website addressed by its content.</h1><p class="hero-lead">An IPFS website starts with familiar web files. The difference is that a release can be identified by its content, rather than only by the server that happens to deliver it.</p><div class="button-row"><a class="button" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/">Read the field guide<svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a><a class="text-link" href="#the-checklist">See the checklist ↓</a></div></div><aside class="topic-summary lime"><div class="path-top"><span>FIELD NOTES / 01</span><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M12 2l9 5v10l-9 5-9-5V7zM3 7l9 5 9-5M12 12v10"></path></svg></div><h2>What you’ll learn</h2><nav aria-label="On this page"><a class="" href="#start-with-the-files-a-reader-needs">Start with the files a reader needs</a><a class="" href="#use-a-cid-as-a-release-identifier">Use a CID as a release identifier</a><a class="" href="#keep-retrieval-and-retention-explicit">Keep retrieval and retention explicit</a><a class="" href="#add-complexity-only-when-the-site-needs-it">Add complexity only when the site needs it</a></nav></aside></section><section class="wrap guide-layout"><div class="prose guide-prose"><section id="start-with-the-files-a-reader-needs"><h2>Start with the files a reader needs</h2><p>For a content-focused website, the public artifact can be a directory of HTML, CSS, JavaScript, and images. Give each clean route its own entry document, include every required asset, and test the folder through a static HTTP server. The source repository is not automatically the deployment artifact: private drafts, environment files, and build dependencies should stay out of the public release.</p></section><section id="use-a-cid-as-a-release-identifier"><h2>Use a CID as a release identifier</h2><p>A content identifier, or CID, identifies content using a structured addressing format. Treat the root directory CID as a record of the particular website release you approved. Do not confuse it with a memorable domain name, an availability guarantee, or proof that the application is safe. Changing the release requires recording the new content identity and checking its files again.</p></section><section id="keep-retrieval-and-retention-explicit"><h2>Keep retrieval and retention explicit</h2><p>Decide which node or service will retain the release and how readers will retrieve it. Pinning and gateway delivery solve different parts of the problem. A browser opening a warm cached page is not a complete test of availability for a new visitor. Keep a release manifest and test the route that your audience will actually use.</p></section><section id="add-complexity-only-when-the-site-needs-it"><h2>Add complexity only when the site needs it</h2><p>You do not need a blockchain wallet, a token, or a smart contract merely to publish a static website. A CMS can help authors, and a static generator can help maintain templates, but both should end in a public artifact you can inspect. Add application services deliberately rather than inheriting unexplained dependencies from a theme.</p></section><p class="source-note">Technical reference: <a href="https://docs.ipfs.tech/concepts/content-addressing/">IPFS content-addressing documentation</a>. Review the relevant configuration before applying it to a production environment.</p></div><aside class="checklist-panel" id="the-checklist"><p class="eyebrow">BEFORE YOU RELEASE</p><h2>Your working checklist</h2><ul><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Build a complete static output directory.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Test a nested page and its assets directly.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Record and retain the approved root CID.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Publish a readable name after retrieval checks pass.</span></li></ul><a class="text-link" href="https://ipfswebsite.com/ipfs-static-website/">Review static-site fundamentals</a></aside></section><section class="section wrap narrow-section"><p class="eyebrow">COMMON QUESTIONS</p><h2>IPFS Website: the details</h2><div class="faq-list"><details class="faq"><summary>Is an IPFS website automatically permanent?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>No. Plan for retained, reachable copies. A content address alone is not a commitment by someone to store and serve the files indefinitely.</p></div></details><details class="faq"><summary>Does every visitor need IPFS software?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>An HTTP gateway can deliver content to an ordinary browser. The resulting trust and verification properties depend on the delivery route and client.</p></div></details></div></section><section class="section wrap"><div class="section-heading"><div><p class="eyebrow">FIELD GUIDES</p><h2>Go deeper in the Website Lab</h2></div><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid two-posts"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: YOUR FIRST IPFS WEBSITE." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/build-your-first-ipfs-static-website-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/getting-started/">Getting started</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/">Build your first IPFS static website: from folder to CID</a></h3><p>Prepare a portable static site, publish the right directory, and check that every page and asset survives the move to IPFS.</p><div class="post-bottom"><time datetime="2024-06-07">June 7, 2024</time><a aria-label="Read Build your first IPFS static website: from folder to CID" class="card-arrow" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: YOUR DOMAIN. YOUR CONTENT." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-dnslink-custom-domain-gateways-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/">DNSLink and IPFS gateways: connect a domain without breaking releases</a></h3><p>Understand what DNSLink changes, what HTTPS delivery still needs, and how to test a custom domain before switching its published release.</p><div class="post-bottom"><time datetime="2024-10-23">October 23, 2024</time><a aria-label="Read DNSLink and IPFS gateways: connect a domain without breaking releases" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section>]]></content:encoded>
    </item>
    <item>
      <title>IPFS Website Hosting Guide | IPFSwebsite.com</title>
      <link>https://ipfswebsite.com/ipfs-website-hosting/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/ipfs-website-hosting/</guid>
      <description>Compare retention, gateways, domains, and recovery as separate hosting responsibilities.</description>
      <content:encoded><![CDATA[<section class="topic-hero wrap"><div><p class="eyebrow">IPFS Website Hosting / DELIVERY &amp; RETENTION</p><h1>IPFS website hosting, without the guesswork.</h1><p class="hero-lead">Choose a hosting arrangement you can explain: who keeps the files, how browsers retrieve them, and what happens when a release needs to change.</p><div class="button-row"><a class="button" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/">Read the field guide<svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a><a class="text-link" href="#the-checklist">See the checklist ↓</a></div></div><aside class="topic-summary aqua"><div class="path-top"><span>FIELD NOTES / 02</span><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><circle cx="12" cy="12" r="10"></circle><path d="M2 12h20M12 2c6 5 6 15 0 20M12 2c-6 5-6 15 0 20"></path></svg></div><h2>What you’ll learn</h2><nav aria-label="On this page"><a class="" href="#compare-responsibilities-before-plans">Compare responsibilities before plans</a><a class="" href="#match-the-operating-model-to-your-team">Match the operating model to your team</a><a class="" href="#budget-for-a-real-visitor-journey">Budget for a real visitor journey</a><a class="" href="#keep-a-way-out">Keep a way out</a></nav></aside></section><section class="wrap guide-layout"><div class="prose guide-prose"><section id="compare-responsibilities-before-plans"><h2>Compare responsibilities before plans</h2><p>A hosting proposal may bundle storage, gateway access, naming, and deployment tools. Break those features into separate responsibilities before comparing plans. Confirm what an upload response means, when retention is complete, and which delivery limits apply. A large storage allowance does not tell you how a site will behave during a traffic spike or a provider incident.</p></section><section id="match-the-operating-model-to-your-team"><h2>Match the operating model to your team</h2><p>Managed pinning can reduce node maintenance, while a self-operated node gives direct control over retained releases. Either model still needs monitoring, access recovery, and a publishing owner. A second copy can help, but only after you review shared dependencies such as the cloud region, billing account, and credential store. Do not count dashboards as proof of independence.</p></section><section id="budget-for-a-real-visitor-journey"><h2>Budget for a real visitor journey</h2><p>Measure the bytes and requests involved in a representative visit rather than multiplying every visitor by the entire repository size. Separate storage, outgoing traffic, gateway requests, domain services, backups, and operator time. Provider prices and limits change, so record the assumptions behind any estimate and check current terms before making a commitment.</p></section><section id="keep-a-way-out"><h2>Keep a way out</h2><p>Save source revisions, approved artifacts, root CIDs, and the retention purpose of each release somewhere you control. Test moving a release to another retention arrangement before a migration becomes urgent. A portable artifact is most useful when another operator can identify it and retrieve its nested files without access to one particular dashboard.</p></section><p class="source-note">Technical reference: <a href="https://docs.ipfs.tech/concepts/persistence/">IPFS persistence and pinning documentation</a>. Review the relevant configuration before applying it to a production environment.</p></div><aside class="checklist-panel" id="the-checklist"><p class="eyebrow">BEFORE YOU RELEASE</p><h2>Your working checklist</h2><ul><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Confirm how completed pins are reported.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Test cold and repeat retrieval separately.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Document plan limits and failure behavior.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Practice recovering the previous release.</span></li></ul><a class="text-link" href="https://ipfswebsite.com/ipfs-static-website/">Review static-site fundamentals</a></aside></section><section class="section wrap narrow-section"><p class="eyebrow">COMMON QUESTIONS</p><h2>IPFS Website Hosting: the details</h2><div class="faq-list"><details class="faq"><summary>Is pinning the same as a gateway?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>No. Pinning concerns retention; a gateway provides a retrieval interface. A provider may offer both, but the responsibilities remain separate.</p></div></details><details class="faq"><summary>Can a local laptop host production content?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>It can provide content while reachable, but sleep, power, and connectivity interruptions need an availability plan. Do not make it the only copy by accident.</p></div></details></div></section><section class="section wrap"><div class="section-heading"><div><p class="eyebrow">FIELD GUIDES</p><h2>Go deeper in the Website Lab</h2></div><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid two-posts"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: PIN THE SITE. PLAN THE COST." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-hosting-pinning-and-costs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/">IPFS hosting, pinning, and costs: plan the whole delivery path</a></h3><p>Compare local nodes, managed pinning, and gateway delivery without treating an upload or a cached page as an availability guarantee.</p><div class="post-bottom"><time datetime="2025-01-14">January 14, 2025</time><a aria-label="Read IPFS hosting, pinning, and costs: plan the whole delivery path" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: YOUR NODE. YOUR PLAYBOOK." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/run-ipfs-kubo-on-a-vps-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/">Run IPFS on a VPS: a practical Kubo operations checklist</a></h3><p>Plan a node around administrative boundaries, storage, monitoring, retained releases, and recovery—not just a successful daemon start.</p><div class="post-bottom"><time datetime="2025-09-06">September 6, 2025</time><a aria-label="Read Run IPFS on a VPS: a practical Kubo operations checklist" class="card-arrow" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section>]]></content:encoded>
    </item>
    <item>
      <title>IPFS Website dApp Guide | IPFSwebsite.com</title>
      <link>https://ipfswebsite.com/ipfs-website-dapp/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/ipfs-website-dapp/</guid>
      <description>Map the static frontend, browser origin, wallet, RPC services, and on-chain application.</description>
      <content:encoded><![CDATA[<section class="topic-hero wrap"><div><p class="eyebrow">IPFS Website dApp / FRONTEND ARCHITECTURE</p><h1>Host the interface. Understand the whole app.</h1><p class="hero-lead">A dApp frontend can be delivered through IPFS while its live behavior still depends on wallets, network services, and blockchain programs. Make every boundary visible.</p><div class="button-row"><a class="button" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/">Read the field guide<svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a><a class="text-link" href="#the-checklist">See the checklist ↓</a></div></div><aside class="topic-summary lavender"><div class="path-top"><span>FIELD NOTES / 03</span><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M7 6l-6 6 6 6M17 6l6 6-6 6M14 3l-4 18"></path></svg></div><h2>What you’ll learn</h2><nav aria-label="On this page"><a class="" href="#separate-the-frontend-from-execution">Separate the frontend from execution</a><a class="" href="#make-the-first-visit-read-only">Make the first visit read-only</a><a class="" href="#treat-browser-origin-as-a-design-input">Treat browser origin as a design input</a><a class="" href="#test-failures-that-static-hosting-cannot-solve">Test failures that static hosting cannot solve</a></nav></aside></section><section class="wrap guide-layout"><div class="prose guide-prose"><section id="separate-the-frontend-from-execution"><h2>Separate the frontend from execution</h2><p>The files distributed through IPFS describe and implement the browser interface. Ethereum contracts or Solana programs execute within their respective networks, not inside IPFS. A frontend release may include public configuration, but it does not include the entire operating state of the application. Record its expected network, contracts or programs, and runtime services alongside the release CID.</p></section><section id="make-the-first-visit-read-only"><h2>Make the first visit read-only</h2><p>Let a visitor understand the application without connecting a wallet. Explain the supported network and the action the application enables before asking for authorization. Connection, signing, approval, and submission should have distinct states and accurate labels. A rejected request should leave the interface usable instead of reopening a prompt until the visitor accepts.</p></section><section id="treat-browser-origin-as-a-design-input"><h2>Treat browser origin as a design input</h2><p>Application behavior can depend on the origin under which a page is served. Storage, permissions, wallet interaction, and API restrictions deserve testing on the intended hostname. Shared path gateways and origin-isolating gateway arrangements are not interchangeable browser contexts. Define a supported delivery route and test it rather than assuming a local development success transfers everywhere.</p></section><section id="test-failures-that-static-hosting-cannot-solve"><h2>Test failures that static hosting cannot solve</h2><p>An unavailable RPC endpoint is different from a missing script. A returned transaction identifier is different from an observed successful outcome. Handle wrong networks, rejected requests, uncertain submission states, and unavailable observers explicitly. Keep administrative tokens and signing secrets out of the public bundle, and use appropriate test environments before a production release.</p></section><p class="source-note">Technical reference: <a href="https://ethereum.org/developers/docs/dapps/">Ethereum technical introduction to dApps</a>. Review the relevant configuration before applying it to a production environment.</p></div><aside class="checklist-panel" id="the-checklist"><p class="eyebrow">BEFORE YOU RELEASE</p><h2>Your working checklist</h2><ul><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Inventory every runtime dependency.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Keep critical information accessible without a wallet.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Review network and destination configuration.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Test authorization and observation as separate states.</span></li></ul><a class="text-link" href="https://ipfswebsite.com/ipfs-static-website/">Review static-site fundamentals</a></aside></section><section class="section wrap narrow-section"><p class="eyebrow">COMMON QUESTIONS</p><h2>IPFS Website dApp: the details</h2><div class="faq-list"><details class="faq"><summary>Does IPFS run smart contracts?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>No. In this architecture IPFS distributes the frontend and public assets. Contract or program execution belongs to the chosen blockchain network.</p></div></details><details class="faq"><summary>Does a frontend CID prove that a dApp is safe?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>No. It identifies a content release, not its correctness, contract security, or the trustworthiness of runtime services.</p></div></details></div></section><section class="section wrap"><div class="section-heading"><div><p class="eyebrow">FIELD GUIDES</p><h2>Go deeper in the Website Lab</h2></div><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid two-posts"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: HOST THE UI. NOT THE CHAIN." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ethereum-dapp-frontend-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/">An Ethereum dApp frontend on IPFS: separate hosting from execution</a></h3><p>Map the frontend, wallet, RPC endpoint, and contract before publishing an Ethereum interface as a content-addressed release.</p><div class="post-bottom"><time datetime="2025-11-18">November 18, 2025</time><a aria-label="Read An Ethereum dApp frontend on IPFS: separate hosting from execution" class="card-arrow" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: SOLANA UI. IPFS DELIVERY." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/solana-website-frontend-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/">A Solana website on IPFS: design the frontend around transaction states</a></h3><p>Prepare a static Solana interface with explicit clusters, wallet behavior, RPC dependencies, and a transaction flow that handles uncertainty.</p><div class="post-bottom"><time datetime="2026-02-11">February 11, 2026</time><a aria-label="Read A Solana website on IPFS: design the frontend around transaction states" class="card-arrow" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section>]]></content:encoded>
    </item>
    <item>
      <title>IPFS Hosting Guide | IPFSwebsite.com</title>
      <link>https://ipfswebsite.com/ipfs-hosting/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/ipfs-hosting/</guid>
      <description>Understand nodes, retained content, HTTP gateways, DNSLink, and the public delivery path.</description>
      <content:encoded><![CDATA[<section class="topic-hero wrap"><div><p class="eyebrow">IPFS Hosting / THE INFRASTRUCTURE MAP</p><h1>Know what each hosting layer does.</h1><p class="hero-lead">IPFS hosting is a system of responsibilities. Start with an architecture map, then decide which parts to operate and which parts to obtain from a provider.</p><div class="button-row"><a class="button" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/">Read the field guide<svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a><a class="text-link" href="#the-checklist">See the checklist ↓</a></div></div><aside class="topic-summary pink"><div class="path-top"><span>FIELD NOTES / 04</span><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><rect height="7" rx="2" width="18" x="3" y="3"></rect><rect height="7" rx="2" width="18" x="3" y="14"></rect><path d="M7 6.5h.1M7 17.5h.1M12 6.5h5M12 17.5h5"></path></svg></div><h2>What you’ll learn</h2><nav aria-label="On this page"><a class="" href="#content-and-providers">Content and providers</a><a class="" href="#gateways-and-browser-access">Gateways and browser access</a><a class="" href="#naming-and-https">Naming and HTTPS</a><a class="" href="#operations-and-observation">Operations and observation</a></nav></aside></section><section class="wrap guide-layout"><div class="prose guide-prose"><section id="content-and-providers"><h2>Content and providers</h2><p>A published release needs reachable infrastructure that can provide its content. Record where the approved directory is retained and how you will verify retrieval after updates or maintenance. Do not infer that a gateway response establishes the existence of an independent retained copy. The reader-facing delivery route and the underlying provider can share dependencies.</p></section><section id="gateways-and-browser-access"><h2>Gateways and browser access</h2><p>An HTTP gateway allows browsers to request IPFS content through ordinary web URLs. Gateway origin structure matters when the content runs scripts or interacts with browser storage. For application interfaces, review subdomain or DNSLink gateway arrangements that provide an intentional origin boundary. Test the public route you support rather than rotating through gateway names without understanding their configuration.</p></section><section id="naming-and-https"><h2>Naming and HTTPS</h2><p>DNSLink can signal which content path a domain name refers to. Serving the website directly through HTTPS still requires an appropriate hosting or gateway arrangement and working domain configuration. Keep both layers in your release notes. If a public domain and a DNSLink record are updated separately, verify that they refer to the intended corresponding release.</p></section><section id="operations-and-observation"><h2>Operations and observation</h2><p>A useful monitoring plan distinguishes process liveness, content availability, domain resolution, HTTPS delivery, and frontend correctness. Choose representative pages and assets, observe them from outside your own server, and record exact failures. Assign an owner to each layer. That makes a report of an unavailable website actionable instead of sending every incident to the same generic restart procedure.</p></section><p class="source-note">Technical reference: <a href="https://docs.ipfs.tech/how-to/gateway-best-practices/">IPFS gateway best practices</a>. Review the relevant configuration before applying it to a production environment.</p></div><aside class="checklist-panel" id="the-checklist"><p class="eyebrow">BEFORE YOU RELEASE</p><h2>Your working checklist</h2><ul><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Draw the path from source files to the reader.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Identify who retains each approved release.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Document naming and HTTPS separately.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Give each failure mode a check and an owner.</span></li></ul><a class="text-link" href="https://ipfswebsite.com/ipfs-static-website/">Review static-site fundamentals</a></aside></section><section class="section wrap narrow-section"><p class="eyebrow">COMMON QUESTIONS</p><h2>IPFS Hosting: the details</h2><div class="faq-list"><details class="faq"><summary>Should I use a public gateway as my entire hosting plan?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>Treat its operator, limits, origin model, and availability as explicit dependencies. A public retrieval endpoint does not replace your own retention and recovery plan.</p></div></details><details class="faq"><summary>Do I need to run a gateway to use IPFS?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>Not necessarily. You can use other delivery arrangements while retaining content independently. Choose according to your operational requirements.</p></div></details></div></section><section class="section wrap"><div class="section-heading"><div><p class="eyebrow">FIELD GUIDES</p><h2>Go deeper in the Website Lab</h2></div><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid two-posts"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: PIN THE SITE. PLAN THE COST." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-hosting-pinning-and-costs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/">IPFS hosting, pinning, and costs: plan the whole delivery path</a></h3><p>Compare local nodes, managed pinning, and gateway delivery without treating an upload or a cached page as an availability guarantee.</p><div class="post-bottom"><time datetime="2025-01-14">January 14, 2025</time><a aria-label="Read IPFS hosting, pinning, and costs: plan the whole delivery path" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: YOUR DOMAIN. YOUR CONTENT." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-dnslink-custom-domain-gateways-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/">DNSLink and IPFS gateways: connect a domain without breaking releases</a></h3><p>Understand what DNSLink changes, what HTTPS delivery still needs, and how to test a custom domain before switching its published release.</p><div class="post-bottom"><time datetime="2024-10-23">October 23, 2024</time><a aria-label="Read DNSLink and IPFS gateways: connect a domain without breaking releases" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section>]]></content:encoded>
    </item>
    <item>
      <title>IPFS Static Website Guide | IPFSwebsite.com</title>
      <link>https://ipfswebsite.com/ipfs-static-website/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/ipfs-static-website/</guid>
      <description>Build directory-based routes, portable links, and self-contained assets for a static IPFS release.</description>
      <content:encoded><![CDATA[<section class="topic-hero wrap"><div><p class="eyebrow">IPFS Static Website / FILES, NOT A BACKEND</p><h1>A complete site. A portable folder.</h1><p class="hero-lead">The strongest starting point is a static directory you can inspect. Give every route a real page and include every asset needed to read it.</p><div class="button-row"><a class="button" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/">Read the field guide<svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a><a class="text-link" href="#the-checklist">See the checklist ↓</a></div></div><aside class="topic-summary lime"><div class="path-top"><span>FIELD NOTES / 05</span><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M12 2l9 5v10l-9 5-9-5V7zM3 7l9 5 9-5M12 12v10"></path></svg></div><h2>What you’ll learn</h2><nav aria-label="On this page"><a class="" href="#create-real-routes">Create real routes</a><a class="" href="#make-resource-paths-deliberate">Make resource paths deliberate</a><a class="" href="#compile-before-publishing">Compile before publishing</a><a class="" href="#keep-metadata-and-navigation-distinct">Keep metadata and navigation distinct</a></nav></aside></section><section class="wrap guide-layout"><div class="prose guide-prose"><section id="create-real-routes"><h2>Create real routes</h2><p>Use a directory with its own index document for each clean page URL. This keeps navigation independent of custom rewrite rules or a development server. Test a deep page by opening it directly and reloading it. A homepage that works does not prove that every route has a real file behind it, particularly when a framework previously supplied a client-side fallback.</p></section><section id="make-resource-paths-deliberate"><h2>Make resource paths deliberate</h2><p>A root-relative path points to the host root, which may not be the release root when served beneath a gateway prefix. Inspect navigation, images, stylesheets, background images, script imports, and generated links. Relative links can preserve a release under a path prefix, but they must be correct at every nesting depth. Test the actual delivery contexts you intend to support.</p></section><section id="compile-before-publishing"><h2>Compile before publishing</h2><p>Deliver production CSS rather than a styling compiler that runs in the reader’s browser. Keep JavaScript small and limited to behavior the site actually needs. Include media files locally where practical, remove unused demo assets, and set image dimensions. Any remaining remote resource is a runtime dependency that should be intentional, not a surprise left by the template.</p></section><section id="keep-metadata-and-navigation-distinct"><h2>Keep metadata and navigation distinct</h2><p>Canonical URLs describe the preferred public identity of a page, while browsing links determine where a visitor goes next. Keep canonical, social, sitemap, and feed URLs consistent with the branded domain. Make internal navigation portable without accidentally rewriting search metadata to a temporary test host. Check article dates and schema against the visible content rather than filling every field automatically.</p></section><p class="source-note">Technical reference: <a href="https://docs.ipfs.tech/how-to/websites-on-ipfs/multipage-website/">IPFS multi-page website tutorial</a>. Review the relevant configuration before applying it to a production environment.</p></div><aside class="checklist-panel" id="the-checklist"><p class="eyebrow">BEFORE YOU RELEASE</p><h2>Your working checklist</h2><ul><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Give every route its own index document.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Crawl links and verify every image file.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Test at the domain root and beneath a prefix.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Exclude secrets, drafts, and development dependencies.</span></li></ul><a class="text-link" href="https://ipfswebsite.com/ipfs-static-website/">Review static-site fundamentals</a></aside></section><section class="section wrap narrow-section"><p class="eyebrow">COMMON QUESTIONS</p><h2>IPFS Static Website: the details</h2><div class="faq-list"><details class="faq"><summary>Can a static site have a mobile menu?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>Yes. Lightweight browser JavaScript can control a menu without a server application. The basic content and navigation should remain understandable without it.</p></div></details><details class="faq"><summary>Can IPFS process a contact form by itself?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>Distributing static files does not provide server-side form processing. Use an honest email link or deliberately integrate a separate service when the requirements call for it.</p></div></details></div></section><section class="section wrap"><div class="section-heading"><div><p class="eyebrow">FIELD GUIDES</p><h2>Go deeper in the Website Lab</h2></div><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid two-posts"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: YOUR FIRST IPFS WEBSITE." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/build-your-first-ipfs-static-website-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/getting-started/">Getting started</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/">Build your first IPFS static website: from folder to CID</a></h3><p>Prepare a portable static site, publish the right directory, and check that every page and asset survives the move to IPFS.</p><div class="post-bottom"><time datetime="2024-06-07">June 7, 2024</time><a aria-label="Read Build your first IPFS static website: from folder to CID" class="card-arrow" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: HUGO TO IPFS. BUILD IT RIGHT." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/publish-hugo-website-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/">Publish a Hugo website on IPFS: URLs, assets, and repeatable builds</a></h3><p>Turn a Hugo project into a portable static release, inspect its generated routes, and keep canonical metadata separate from delivery paths.</p><div class="post-bottom"><time datetime="2025-05-28">May 28, 2025</time><a aria-label="Read Publish a Hugo website on IPFS: URLs, assets, and repeatable builds" class="card-arrow" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section>]]></content:encoded>
    </item>
    <item>
      <title>IPFS VPS Guide | IPFSwebsite.com</title>
      <link>https://ipfswebsite.com/ipfs-vps/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/ipfs-vps/</guid>
      <description>Plan an IPFS VPS around secure administration, storage, monitoring, and recovery.</description>
      <content:encoded><![CDATA[<section class="topic-hero wrap"><div><p class="eyebrow">IPFS VPS / SELF-OPERATED INFRASTRUCTURE</p><h1>Your node needs an operating plan.</h1><p class="hero-lead">Running Kubo on a VPS gives you control over a node. It also gives you responsibility for its interfaces, retained releases, storage growth, and recovery.</p><div class="button-row"><a class="button" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/">Read the field guide<svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a><a class="text-link" href="#the-checklist">See the checklist ↓</a></div></div><aside class="topic-summary aqua"><div class="path-top"><span>FIELD NOTES / 06</span><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><circle cx="12" cy="12" r="10"></circle><path d="M2 12h20M12 2c6 5 6 15 0 20M12 2c-6 5-6 15 0 20"></path></svg></div><h2>What you’ll learn</h2><nav aria-label="On this page"><a class="" href="#start-with-a-narrow-role">Start with a narrow role</a><a class="" href="#keep-administration-private">Keep administration private</a><a class="" href="#plan-the-repository-lifecycle">Plan the repository lifecycle</a><a class="" href="#practice-a-replacement">Practice a replacement</a></nav></aside></section><section class="wrap guide-layout"><div class="prose guide-prose"><section id="start-with-a-narrow-role"><h2>Start with a narrow role</h2><p>Decide whether the machine retains your site, serves a public gateway, or supports a private publishing workflow. List the interfaces that must be reachable and the reason for each. Do not accidentally turn a personal content provider into an unrestricted public retrieval service. Document the node’s relationship to the public domain and any independently retained copies.</p></section><section id="keep-administration-private"><h2>Keep administration private</h2><p>Kubo’s RPC API provides administrative control over the node. It is not the same as a public gateway. Keep it private by default and review the complete access path, including firewalls, reverse proxies, and container port mappings. If remote automation is needed, design a protected, narrowly scoped route rather than exposing a management port to make a tool work.</p></section><section id="plan-the-repository-lifecycle"><h2>Plan the repository lifecycle</h2><p>Track the current release, rollback releases, and archival copies separately. Measure disk growth and keep enough headroom for the workload you actually observe. Record which root CIDs should remain pinned and why. Maintenance should be based on that manifest, not on deleting unfamiliar files until the machine has free space. Protect sensitive node configuration separately from public artifacts.</p></section><section id="practice-a-replacement"><h2>Practice a replacement</h2><p>A backup becomes useful when you have restored it successfully. Recover a known release on a replacement environment and test the public delivery path. Keep source files, build instructions, release records, and necessary private configuration in appropriate independent storage. Monitor meaningful content retrieval as well as process liveness, and give alerts a current owner who knows the recovery procedure.</p></section><p class="source-note">Technical reference: <a href="https://docs.ipfs.tech/reference/kubo/rpc/">Kubo RPC administrative-interface reference</a>. Review the relevant configuration before applying it to a production environment.</p></div><aside class="checklist-panel" id="the-checklist"><p class="eyebrow">BEFORE YOU RELEASE</p><h2>Your working checklist</h2><ul><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Separate gateway and administrative endpoints.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Review the actual exposed network interfaces.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Maintain a pin manifest and disk alerts.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Restore a known release in a replacement environment.</span></li></ul><a class="text-link" href="https://ipfswebsite.com/ipfs-static-website/">Review static-site fundamentals</a></aside></section><section class="section wrap narrow-section"><p class="eyebrow">COMMON QUESTIONS</p><h2>IPFS VPS: the details</h2><div class="faq-list"><details class="faq"><summary>How much RAM or storage do I need?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>There is no universal size for every site and gateway workload. Estimate your retained data and traffic, then measure actual resource use and leave operating headroom.</p></div></details><details class="faq"><summary>Does one VPS make the site redundant?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>No. A single machine still has dependencies on its host, network, disk, and operator. Review independent retention and recovery according to the consequences of an outage.</p></div></details></div></section><section class="section wrap"><div class="section-heading"><div><p class="eyebrow">FIELD GUIDES</p><h2>Go deeper in the Website Lab</h2></div><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid two-posts"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: YOUR NODE. YOUR PLAYBOOK." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/run-ipfs-kubo-on-a-vps-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/">Run IPFS on a VPS: a practical Kubo operations checklist</a></h3><p>Plan a node around administrative boundaries, storage, monitoring, retained releases, and recovery—not just a successful daemon start.</p><div class="post-bottom"><time datetime="2025-09-06">September 6, 2025</time><a aria-label="Read Run IPFS on a VPS: a practical Kubo operations checklist" class="card-arrow" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: PIN THE SITE. PLAN THE COST." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-hosting-pinning-and-costs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/">IPFS hosting, pinning, and costs: plan the whole delivery path</a></h3><p>Compare local nodes, managed pinning, and gateway delivery without treating an upload or a cached page as an availability guarantee.</p><div class="post-bottom"><time datetime="2025-01-14">January 14, 2025</time><a aria-label="Read IPFS hosting, pinning, and costs: plan the whole delivery path" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section>]]></content:encoded>
    </item>
    <item>
      <title>IPFS Hugo Website Guide | IPFSwebsite.com</title>
      <link>https://ipfswebsite.com/ipfs-hugo-website/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/ipfs-hugo-website/</guid>
      <description>Inspect Hugo output, URL settings, assets, taxonomy pages, feeds, and release records before publishing to IPFS.</description>
      <content:encoded><![CDATA[<section class="topic-hero wrap"><div><p class="eyebrow">IPFS Hugo Website / STATIC GENERATION</p><h1>Write in Hugo. Publish a tested release.</h1><p class="hero-lead">Keep the authoring workflow you know. Make the generated directory—not the preview server—the artifact you review and publish.</p><div class="button-row"><a class="button" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/">Read the field guide<svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a><a class="text-link" href="#the-checklist">See the checklist ↓</a></div></div><aside class="topic-summary lavender"><div class="path-top"><span>FIELD NOTES / 07</span><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M7 6l-6 6 6 6M17 6l6 6-6 6M14 3l-4 18"></path></svg></div><h2>What you’ll learn</h2><nav aria-label="On this page"><a class="" href="#inspect-the-publish-directory">Inspect the publish directory</a><a class="" href="#review-url-behavior-in-the-theme">Review URL behavior in the theme</a><a class="" href="#treat-archives-and-feeds-as-first-class-pages">Treat archives and feeds as first-class pages</a><a class="" href="#keep-builds-and-releases-traceable">Keep builds and releases traceable</a></nav></aside></section><section class="wrap guide-layout"><div class="prose guide-prose"><section id="inspect-the-publish-directory"><h2>Inspect the publish directory</h2><p>A Hugo source project is not the same as its public output. Build into a clean destination and verify that only intended pages and assets remain. Renamed content can leave stale files behind when an old output directory is reused carelessly. Record the generator version, theme revision, and production command so another maintainer can understand the release.</p></section><section id="review-url-behavior-in-the-theme"><h2>Review URL behavior in the theme</h2><p>Set the canonical site address deliberately and inspect how the theme constructs links. A single relative-URL setting does not guarantee that hardcoded images, scripts, shortcodes, and pagination become portable. Test a nested page through the intended gateway context. Keep the branded canonical identity separate from temporary delivery URLs used during a deployment test.</p></section><section id="treat-archives-and-feeds-as-first-class-pages"><h2>Treat archives and feeds as first-class pages</h2><p>Check category pages, tag archives, pagination, RSS, and the sitemap alongside the homepage. Their metadata and publication dates should describe the actual content consistently. Exclude drafts and future content according to the editorial policy. Avoid marking every article as newly modified merely because the generator rebuilt the site after an unrelated change.</p></section><section id="keep-builds-and-releases-traceable"><h2>Keep builds and releases traceable</h2><p>Pin dependencies and record the relationship between a source revision and the root CID of its generated directory. Investigate unexpected output differences rather than assuming every new build should be identical or every difference is harmless. Retain the approved release before changing the public name. Keep the previous release available through a deliberate rollback period.</p></section><p class="source-note">Technical reference: <a href="https://gohugo.io/configuration/all/">Hugo configuration reference</a>. Review the relevant configuration before applying it to a production environment.</p></div><aside class="checklist-panel" id="the-checklist"><p class="eyebrow">BEFORE YOU RELEASE</p><h2>Your working checklist</h2><ul><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Build into a clean output directory.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Test nested pages and processed images.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Check canonical URLs, feed links, and archives.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Record the source revision and root CID together.</span></li></ul><a class="text-link" href="https://ipfswebsite.com/ipfs-static-website/">Review static-site fundamentals</a></aside></section><section class="section wrap narrow-section"><p class="eyebrow">COMMON QUESTIONS</p><h2>IPFS Hugo Website: the details</h2><div class="faq-list"><details class="faq"><summary>Must the public server run Hugo?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>No. A generated static output directory can be served without running Hugo for each request. Hugo remains part of your authoring and build workflow.</p></div></details><details class="faq"><summary>Should I always enable relative URLs?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>Do not treat a global setting as a universal fix. Review the official setting behavior and inspect the output of your particular theme in the delivery contexts you support.</p></div></details></div></section><section class="section wrap"><div class="section-heading"><div><p class="eyebrow">FIELD GUIDES</p><h2>Go deeper in the Website Lab</h2></div><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid two-posts"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: HUGO TO IPFS. BUILD IT RIGHT." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/publish-hugo-website-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/">Publish a Hugo website on IPFS: URLs, assets, and repeatable builds</a></h3><p>Turn a Hugo project into a portable static release, inspect its generated routes, and keep canonical metadata separate from delivery paths.</p><div class="post-bottom"><time datetime="2025-05-28">May 28, 2025</time><a aria-label="Read Publish a Hugo website on IPFS: URLs, assets, and repeatable builds" class="card-arrow" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: EDIT CONTENT. PUBLISH A CID." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-headless-cms-publishing-workflow-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/">An IPFS website CMS workflow: edit privately, publish static releases</a></h3><p>Design a content workflow that separates authoring, previews, approvals, static output, and IPFS publication without exposing the CMS to every visitor.</p><div class="post-bottom"><time datetime="2024-02-19">February 19, 2024</time><a aria-label="Read An IPFS website CMS workflow: edit privately, publish static releases" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section>]]></content:encoded>
    </item>
    <item>
      <title>IPFS Website CMS Guide | IPFSwebsite.com</title>
      <link>https://ipfswebsite.com/ipfs-website-cms/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/ipfs-website-cms/</guid>
      <description>Separate content authoring, preview, approval, static builds, and IPFS delivery.</description>
      <content:encoded><![CDATA[<section class="topic-hero wrap"><div><p class="eyebrow">IPFS Website CMS / EDITORIAL WORKFLOWS</p><h1>Edit privately. Publish complete pages.</h1><p class="hero-lead">A CMS can power the editorial side while readers receive a lightweight static website. Keep the boundary between private work and public artifacts explicit.</p><div class="button-row"><a class="button" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/">Read the field guide<svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a><a class="text-link" href="#the-checklist">See the checklist ↓</a></div></div><aside class="topic-summary pink"><div class="path-top"><span>FIELD NOTES / 08</span><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><rect height="7" rx="2" width="18" x="3" y="3"></rect><rect height="7" rx="2" width="18" x="3" y="14"></rect><path d="M7 6.5h.1M7 17.5h.1M12 6.5h5M12 17.5h5"></path></svg></div><h2>What you’ll learn</h2><nav aria-label="On this page"><a class="" href="#choose-the-authoring-model">Choose the authoring model</a><a class="" href="#model-content-for-people-and-pages">Model content for people and pages</a><a class="" href="#keep-sensitive-material-on-the-authoring-side">Keep sensitive material on the authoring side</a><a class="" href="#make-publication-a-controlled-transition">Make publication a controlled transition</a></nav></aside></section><section class="wrap guide-layout"><div class="prose guide-prose"><section id="choose-the-authoring-model"><h2>Choose the authoring model</h2><p>A Git-based CMS, a hosted headless CMS, or a conventional CMS with a static export can support different publishing needs. Evaluate draft review, images, permissions, localization, and export before choosing a model. The important question is how approved content becomes a complete public artifact, not whether a product name includes decentralized or headless.</p></section><section id="model-content-for-people-and-pages"><h2>Model content for people and pages</h2><p>Define the title, slug, excerpt, body, images, alt text, dates, categories, and related topics your editors need. Validate required fields before generating the website. Give editors understandable errors rather than an unexplained failed deployment. Keep taxonomies purposeful: a category should organize a real subject, and a tag archive should help a reader find relevant material.</p></section><section id="keep-sensitive-material-on-the-authoring-side"><h2>Keep sensitive material on the authoring side</h2><p>Draft content, CMS access tokens, private previews, and administrator details do not belong in the deployed folder. A difficult-to-guess content address is not access control. Review the actual static output for leaks before publication. Removing a link or switching a public pointer later cannot guarantee the disappearance of previously distributed copies.</p></section><section id="make-publication-a-controlled-transition"><h2>Make publication a controlled transition</h2><p>Separate saved, approved, built, retained, and publicly available states. A CMS save event should not silently imply that the final release has passed testing. Record the revision that produced each root CID and the person or process that approved publication. Test media, archives, metadata, and feeds together before changing the public entry point.</p></section><p class="source-note">Technical reference: <a href="https://decapcms.org/docs/intro/">Decap CMS architecture overview</a>. Review the relevant configuration before applying it to a production environment.</p></div><aside class="checklist-panel" id="the-checklist"><p class="eyebrow">BEFORE YOU RELEASE</p><h2>Your working checklist</h2><ul><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Validate the editorial content model.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Keep drafts and credentials out of the artifact.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Generate complete HTML for public content.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Publish only after approval and retrieval checks.</span></li></ul><a class="text-link" href="https://ipfswebsite.com/ipfs-static-website/">Review static-site fundamentals</a></aside></section><section class="section wrap narrow-section"><p class="eyebrow">COMMON QUESTIONS</p><h2>IPFS Website CMS: the details</h2><div class="faq-list"><details class="faq"><summary>Does the CMS itself run on IPFS?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>Not in this architecture. The CMS handles authoring and access control separately; IPFS distributes the approved static output.</p></div></details><details class="faq"><summary>Can a browser fetch CMS content at runtime?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>It can when the chosen API permits it, but that creates an ongoing dependency on the CMS service. Describe that dependency rather than claiming a fully self-contained release.</p></div></details></div></section><section class="section wrap"><div class="section-heading"><div><p class="eyebrow">FIELD GUIDES</p><h2>Go deeper in the Website Lab</h2></div><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid two-posts"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: EDIT CONTENT. PUBLISH A CID." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-headless-cms-publishing-workflow-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/">An IPFS website CMS workflow: edit privately, publish static releases</a></h3><p>Design a content workflow that separates authoring, previews, approvals, static output, and IPFS publication without exposing the CMS to every visitor.</p><div class="post-bottom"><time datetime="2024-02-19">February 19, 2024</time><a aria-label="Read An IPFS website CMS workflow: edit privately, publish static releases" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: AI CAN DRAFT. YOU VERIFY." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ai-ipfs-website-builder-static-export-checklist-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/">AI IPFS website builder checklist: review the export before publishing</a></h3><p>Evaluate generated sites by their actual files, dependencies, accessibility, metadata, and release behavior—not by a convincing preview.</p><div class="post-bottom"><time datetime="2026-09-17">September 17, 2026</time><a aria-label="Read AI IPFS website builder checklist: review the export before publishing" class="card-arrow" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section>]]></content:encoded>
    </item>
    <item>
      <title>IPFS Ethereum Website Guide | IPFSwebsite.com</title>
      <link>https://ipfswebsite.com/ipfs-ethereum-website/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/ipfs-ethereum-website/</guid>
      <description>Publish an Ethereum interface while keeping networks, contracts, wallets, and transaction states explicit.</description>
      <content:encoded><![CDATA[<section class="topic-hero wrap"><div><p class="eyebrow">IPFS Ethereum Website / ETHEREUM FRONTENDS</p><h1>A versioned frontend for your Ethereum app.</h1><p class="hero-lead">Use a CID to identify the frontend you released. Keep the chain, contract configuration, wallet permissions, and live services in their own clearly documented layers.</p><div class="button-row"><a class="button" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/">Read the field guide<svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a><a class="text-link" href="#the-checklist">See the checklist ↓</a></div></div><aside class="topic-summary lime"><div class="path-top"><span>FIELD NOTES / 09</span><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M12 2l9 5v10l-9 5-9-5V7zM3 7l9 5 9-5M12 12v10"></path></svg></div><h2>What you’ll learn</h2><nav aria-label="On this page"><a class="" href="#keep-the-architecture-honest">Keep the architecture honest</a><a class="" href="#review-destinations-before-release">Review destinations before release</a><a class="" href="#respect-authorization-boundaries">Respect authorization boundaries</a><a class="" href="#observe-outcomes-without-inventing-certainty">Observe outcomes without inventing certainty</a></nav></aside></section><section class="wrap guide-layout"><div class="prose guide-prose"><section id="keep-the-architecture-honest"><h2>Keep the architecture honest</h2><p>An Ethereum frontend can be hosted on IPFS while its contracts execute on Ethereum and its browser reads through an RPC service. Additional indexers or APIs are still runtime dependencies. Identify every component in a release record. Do not describe content-addressed delivery as proof of contract security or as evidence that the entire application has no centralized dependencies.</p></section><section id="review-destinations-before-release"><h2>Review destinations before release</h2><p>Maintain an approved network-to-contract mapping and treat changes to it as code changes. Display the intended network and destination near important actions. Handle the wallet changing networks or accounts while the page is open. Keep test configuration separate from production and fail visibly when critical values are missing instead of silently selecting a convenient default.</p></section><section id="respect-authorization-boundaries"><h2>Respect authorization boundaries</h2><p>Let users read before connecting. Distinguish a connection, a signature, an approval, and a transaction submission in both code and copy. Where permissions are needed, identify the spender and scope. A rejected request should not trigger repeated prompts. Never ask visitors for seed phrases or private keys, and never place signing or deployment secrets in public files.</p></section><section id="observe-outcomes-without-inventing-certainty"><h2>Observe outcomes without inventing certainty</h2><p>Preparation, wallet review, submission, and observed network results are different states. Preserve a transaction reference when observation fails and explain uncertainty instead of displaying an unsupported success message. Test wrong networks, unavailable RPC services, rejected requests, and reloads during a pending action. Review older frontend compatibility before treating a static-file rollback as an application rollback.</p></section><p class="source-note">Technical reference: <a href="https://ethereum.org/developers/docs/dapps/">Ethereum developer documentation on dApps</a>. Review the relevant configuration before applying it to a production environment.</p></div><aside class="checklist-panel" id="the-checklist"><p class="eyebrow">BEFORE YOU RELEASE</p><h2>Your working checklist</h2><ul><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Version network and contract configuration.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Test the actual production browser origin.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Distinguish connection, approval, and transaction actions.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Record the frontend CID with its expected dependencies.</span></li></ul><a class="text-link" href="https://ipfswebsite.com/ipfs-static-website/">Review static-site fundamentals</a></aside></section><section class="section wrap narrow-section"><p class="eyebrow">COMMON QUESTIONS</p><h2>IPFS Ethereum Website: the details</h2><div class="faq-list"><details class="faq"><summary>Does uploading a frontend deploy its contract?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>No. Frontend publication and contract deployment are separate processes. The interface must be configured for the contract it is intended to use.</p></div></details><details class="faq"><summary>Can an old frontend safely be restored?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>Only after compatibility is reviewed. Restoring page files does not reverse blockchain state, contract changes, or changes in external APIs.</p></div></details></div></section><section class="section wrap"><div class="section-heading"><div><p class="eyebrow">FIELD GUIDES</p><h2>Go deeper in the Website Lab</h2></div><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid two-posts"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: HOST THE UI. NOT THE CHAIN." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ethereum-dapp-frontend-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/">An Ethereum dApp frontend on IPFS: separate hosting from execution</a></h3><p>Map the frontend, wallet, RPC endpoint, and contract before publishing an Ethereum interface as a content-addressed release.</p><div class="post-bottom"><time datetime="2025-11-18">November 18, 2025</time><a aria-label="Read An Ethereum dApp frontend on IPFS: separate hosting from execution" class="card-arrow" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: CLEAR ASSETS. CLEAR ACTIONS." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-stablecoin-interface-safety-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/">IPFS and stablecoin interfaces: verify networks, assets, and payment states</a></h3><p>Plan a stablecoin-related frontend around asset identity, explicit authorization, public-data boundaries, and reliable transaction observation.</p><div class="post-bottom"><time datetime="2026-06-24">June 24, 2026</time><a aria-label="Read IPFS and stablecoin interfaces: verify networks, assets, and payment states" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section>]]></content:encoded>
    </item>
    <item>
      <title>IPFS Solana Website Guide | IPFSwebsite.com</title>
      <link>https://ipfswebsite.com/ipfs-solana-website/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/ipfs-solana-website/</guid>
      <description>Plan Solana frontend releases around clusters, program identifiers, wallets, RPC services, and transaction observation.</description>
      <content:encoded><![CDATA[<section class="topic-hero wrap"><div><p class="eyebrow">IPFS Solana Website / SOLANA FRONTENDS</p><h1>Static delivery. Explicit transaction states.</h1><p class="hero-lead">IPFS can distribute the interface. Solana executes the program instructions. A usable application makes that separation clear before the user is asked to sign.</p><div class="button-row"><a class="button" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/">Read the field guide<svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a><a class="text-link" href="#the-checklist">See the checklist ↓</a></div></div><aside class="topic-summary aqua"><div class="path-top"><span>FIELD NOTES / 10</span><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><circle cx="12" cy="12" r="10"></circle><path d="M2 12h20M12 2c6 5 6 15 0 20M12 2c-6 5-6 15 0 20"></path></svg></div><h2>What you’ll learn</h2><nav aria-label="On this page"><a class="" href="#make-the-environment-unmistakable">Make the environment unmistakable</a><a class="" href="#prepare-the-entire-requested-action">Prepare the entire requested action</a><a class="" href="#separate-submission-from-observation">Separate submission from observation</a><a class="" href="#test-the-release-as-a-complete-interface">Test the release as a complete interface</a></nav></aside></section><section class="wrap guide-layout"><div class="prose guide-prose"><section id="make-the-environment-unmistakable"><h2>Make the environment unmistakable</h2><p>Keep development and production cluster configuration separate. Display the selected environment near consequential actions and version the approved program identifiers with the frontend. Do not make a missing variable silently switch a test interface into production. Clear environment labeling belongs in screenshots and documentation as well as in the running application.</p></section><section id="prepare-the-entire-requested-action"><h2>Prepare the entire requested action</h2><p>A transaction can contain multiple instructions. Show users the meaning of the full action rather than describing only its first visible step. Prepare time-sensitive transaction data deliberately and account for a user taking time to review. When material details change, request a new review instead of silently changing what the wallet is being asked to authorize.</p></section><section id="separate-submission-from-observation"><h2>Separate submission from observation</h2><p>A returned signature does not automatically mean the intended operation has completed as expected. Define the observation state the application needs, preserve transaction references, and explain uncertainty when an RPC observer is unavailable. Avoid encouraging an immediate duplicate attempt merely because the browser lost contact after submission. Reconcile the known action where the workflow permits it.</p></section><section id="test-the-release-as-a-complete-interface"><h2>Test the release as a complete interface</h2><p>Inspect the production output for missing chunks, development URLs, and private configuration. Test wallet behavior under the intended public origin. Exercise account changes, rejected requests, stale preparation, failed instructions, and unavailable RPC services in appropriate test environments. Keep the exact frontend CID and configuration in the test record so a passing development build is not mistaken for a verified release.</p></section><p class="source-note">Technical reference: <a href="https://solana.com/docs/core/transactions">Solana transaction documentation</a>. Review the relevant configuration before applying it to a production environment.</p></div><aside class="checklist-panel" id="the-checklist"><p class="eyebrow">BEFORE YOU RELEASE</p><h2>Your working checklist</h2><ul><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Version cluster and program configuration.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Keep wallet connection separate from signing.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Model preparation, submission, and observation explicitly.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Test uncertain outcomes and reload behavior.</span></li></ul><a class="text-link" href="https://ipfswebsite.com/ipfs-static-website/">Review static-site fundamentals</a></aside></section><section class="section wrap narrow-section"><p class="eyebrow">COMMON QUESTIONS</p><h2>IPFS Solana Website: the details</h2><div class="faq-list"><details class="faq"><summary>Does IPFS execute Solana programs?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>No. IPFS distributes public frontend files and assets in this architecture; program execution belongs to Solana.</p></div></details><details class="faq"><summary>Should a failed transaction always be labeled free?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>No. Solana transaction fees can still apply when execution fails. Describe outcomes accurately and avoid universal fee promises.</p></div></details></div></section><section class="section wrap"><div class="section-heading"><div><p class="eyebrow">FIELD GUIDES</p><h2>Go deeper in the Website Lab</h2></div><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid two-posts"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: SOLANA UI. IPFS DELIVERY." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/solana-website-frontend-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/">A Solana website on IPFS: design the frontend around transaction states</a></h3><p>Prepare a static Solana interface with explicit clusters, wallet behavior, RPC dependencies, and a transaction flow that handles uncertainty.</p><div class="post-bottom"><time datetime="2026-02-11">February 11, 2026</time><a aria-label="Read A Solana website on IPFS: design the frontend around transaction states" class="card-arrow" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: CLEAR ASSETS. CLEAR ACTIONS." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-stablecoin-interface-safety-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/">IPFS and stablecoin interfaces: verify networks, assets, and payment states</a></h3><p>Plan a stablecoin-related frontend around asset identity, explicit authorization, public-data boundaries, and reliable transaction observation.</p><div class="post-bottom"><time datetime="2026-06-24">June 24, 2026</time><a aria-label="Read IPFS and stablecoin interfaces: verify networks, assets, and payment states" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section>]]></content:encoded>
    </item>
    <item>
      <title>IPFS Stablecoins Guide | IPFSwebsite.com</title>
      <link>https://ipfswebsite.com/ipfs-stablecoins/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/ipfs-stablecoins/</guid>
      <description>Understand the role of IPFS in stablecoin-related websites without confusing delivery with issuance or settlement.</description>
      <content:encoded><![CDATA[<section class="topic-hero wrap"><div><p class="eyebrow">IPFS Stablecoins / ASSET INTERFACE DESIGN</p><h1>Clear assets. Clear actions. No shortcuts.</h1><p class="hero-lead">An IPFS stablecoin website is a website about or interacting with an asset. IPFS does not itself issue the stablecoin, maintain its target value, or confirm its payments.</p><div class="button-row"><a class="button" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/">Read the field guide<svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a><a class="text-link" href="#the-checklist">See the checklist ↓</a></div></div><aside class="topic-summary lavender"><div class="path-top"><span>FIELD NOTES / 11</span><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M7 6l-6 6 6 6M17 6l6 6-6 6M14 3l-4 18"></path></svg></div><h2>What you’ll learn</h2><nav aria-label="On this page"><a class="" href="#identify-the-exact-asset">Identify the exact asset</a><a class="" href="#separate-content-from-financial-promises">Separate content from financial promises</a><a class="" href="#design-reviewable-authorization">Design reviewable authorization</a><a class="" href="#observe-payments-and-protect-private-records">Observe payments and protect private records</a></nav></aside></section><section class="wrap guide-layout"><div class="prose guide-prose"><section id="identify-the-exact-asset"><h2>Identify the exact asset</h2><p>A symbol and logo do not uniquely establish an asset’s identity. Review the network, contract or mint identifier, supported representation, and display precision against authoritative documentation. Keep the configuration versioned with the frontend. Test assets and production assets must remain visibly distinct, and a familiar ticker should never substitute for destination verification.</p></section><section id="separate-content-from-financial-promises"><h2>Separate content from financial promises</h2><p>Content-addressed hosting can identify a frontend release. It does not guarantee redemption, maintain a peg, remove issuer or bridge dependencies, or audit the application. Describe only the service you actually operate. An educational website should not imply that it provides custody, payments, or settlement simply because those are subjects covered by its guides.</p></section><section id="design-reviewable-authorization"><h2>Design reviewable authorization</h2><p>Show the network, destination, asset, amount, and permission scope before a wallet request. Distinguish connecting from signing, approving, or transferring. Validate conversions and precision deliberately rather than silently rounding a payment. Never ask for seed phrases or private keys. Use appropriate testing environments to exercise wrong-network states, rejected requests, and configuration mismatches.</p></section><section id="observe-payments-and-protect-private-records"><h2>Observe payments and protect private records</h2><p>A click or browser callback is not sufficient evidence of settlement. A payment-related application needs a deliberate observation and reconciliation process, and private order handling may require infrastructure beyond a static frontend. Keep invoices, customer details, private tokens, and sensitive receipts out of public release files. Obtain qualified advice appropriate to any real service and jurisdictions involved.</p></section><p class="source-note">Technical reference: <a href="https://developers.circle.com/stablecoins/usdc-contract-addresses">Circle’s network-specific USDC reference</a>. Review the relevant configuration before applying it to a production environment.</p></div><aside class="checklist-panel" id="the-checklist"><p class="eyebrow">BEFORE YOU RELEASE</p><h2>Your working checklist</h2><ul><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Verify network-specific asset identifiers.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Keep test and production contexts distinct.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Describe authorization before requesting it.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Separate public content from private order records.</span></li></ul><a class="text-link" href="https://ipfswebsite.com/ipfs-static-website/">Review static-site fundamentals</a></aside></section><section class="section wrap narrow-section"><p class="eyebrow">COMMON QUESTIONS</p><h2>IPFS Stablecoins: the details</h2><div class="faq-list"><details class="faq"><summary>Is there an IPFS-native stablecoin implied by this page?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>No. This guide concerns website delivery and interface architecture, not an asset issued by IPFSwebsite.com or by the IPFS protocol.</p></div></details><details class="faq"><summary>Does a static website provide a payment backend?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>Not by itself. Transaction observation, fulfillment, and private order management require a deliberately designed architecture beyond simply distributing files.</p></div></details></div></section><section class="section wrap"><div class="section-heading"><div><p class="eyebrow">FIELD GUIDES</p><h2>Go deeper in the Website Lab</h2></div><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid two-posts"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: CLEAR ASSETS. CLEAR ACTIONS." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-stablecoin-interface-safety-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/">IPFS and stablecoin interfaces: verify networks, assets, and payment states</a></h3><p>Plan a stablecoin-related frontend around asset identity, explicit authorization, public-data boundaries, and reliable transaction observation.</p><div class="post-bottom"><time datetime="2026-06-24">June 24, 2026</time><a aria-label="Read IPFS and stablecoin interfaces: verify networks, assets, and payment states" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: HOST THE UI. NOT THE CHAIN." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ethereum-dapp-frontend-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/">An Ethereum dApp frontend on IPFS: separate hosting from execution</a></h3><p>Map the frontend, wallet, RPC endpoint, and contract before publishing an Ethereum interface as a content-addressed release.</p><div class="post-bottom"><time datetime="2025-11-18">November 18, 2025</time><a aria-label="Read An Ethereum dApp frontend on IPFS: separate hosting from execution" class="card-arrow" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section>]]></content:encoded>
    </item>
    <item>
      <title>AI IPFS Website Builder Guide | IPFSwebsite.com</title>
      <link>https://ipfswebsite.com/ai-ipfs-website-builder/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/ai-ipfs-website-builder/</guid>
      <description>Evaluate AI website-builder output for complete static files, truthful content, accessibility, and portable IPFS delivery.</description>
      <content:encoded><![CDATA[<section class="topic-hero wrap"><div><p class="eyebrow">AI IPFS Website Builder / GENERATE, REVIEW, RELEASE</p><h1>A good draft still needs a release check.</h1><p class="hero-lead">Judge the exported folder, not just the preview. An AI-assisted workflow becomes useful when its output can be inspected, rebuilt, tested, and published deliberately.</p><div class="button-row"><a class="button" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/">Read the field guide<svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a><a class="text-link" href="#the-checklist">See the checklist ↓</a></div></div><aside class="topic-summary pink"><div class="path-top"><span>FIELD NOTES / 12</span><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><rect height="7" rx="2" width="18" x="3" y="3"></rect><rect height="7" rx="2" width="18" x="3" y="14"></rect><path d="M7 6.5h.1M7 17.5h.1M12 6.5h5M12 17.5h5"></path></svg></div><h2>What you’ll learn</h2><nav aria-label="On this page"><a class="" href="#specify-the-deliverable">Specify the deliverable</a><a class="" href="#inspect-files-and-claims">Inspect files and claims</a><a class="" href="#keep-generation-away-from-privileged-deployment">Keep generation away from privileged deployment</a><a class="" href="#verify-the-actual-release">Verify the actual release</a></nav></aside></section><section class="wrap guide-layout"><div class="prose guide-prose"><section id="specify-the-deliverable"><h2>Specify the deliverable</h2><p>Define the page inventory, static architecture, compiled styling, included assets, and supported interactions before generation. State which features are intentionally absent. Require real routes and completed destinations instead of generic buttons. This turns an open-ended design prompt into a reviewable output contract and makes missing functionality visible before publication.</p></section><section id="inspect-files-and-claims"><h2>Inspect files and claims</h2><p>Stop the preview environment and serve the output as ordinary static files. Check nested pages, assets, script imports, and remote dependencies. Read the content for invented testimonials, statistics, credentials, partnerships, and product features. A generated hosting guide must not accidentally claim to operate a network, and a builder overview must not pretend to contain a working generator.</p></section><section id="keep-generation-away-from-privileged-deployment"><h2>Keep generation away from privileged deployment</h2><p>Treat supplied documents, templates, and retrieved text as untrusted inputs. Do not let instructions embedded in those materials authorize changing DNS, accessing secrets, or publishing private files. Keep production credentials outside the generation step and require review before privileged actions. A narrow workflow makes both accidental mistakes and prompt-injection attempts easier to contain.</p></section><section id="verify-the-actual-release"><h2>Verify the actual release</h2><p>Check keyboard navigation, mobile layouts, focus visibility, contrast, image dimensions, routes, metadata, structured data, and feeds. Search compiled files for development URLs and exposed configuration. Record which artifact passed the checks, then retain and publish that exact folder. Generation is the beginning of the process, not evidence that the final output is correct.</p></section><p class="source-note">Technical reference: <a href="https://genai.owasp.org/llmrisk/llm01-prompt-injection/">OWASP prompt-injection guidance</a>. Review the relevant configuration before applying it to a production environment.</p></div><aside class="checklist-panel" id="the-checklist"><p class="eyebrow">BEFORE YOU RELEASE</p><h2>Your working checklist</h2><ul><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Define static output and absent features explicitly.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Review content for unsupported business claims.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Keep privileged credentials out of generation.</span></li><li><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12l4 4L19 6"></path></svg><span>Test and record the exact release artifact.</span></li></ul><a class="text-link" href="https://ipfswebsite.com/ipfs-static-website/">Review static-site fundamentals</a></aside></section><section class="section wrap narrow-section"><p class="eyebrow">COMMON QUESTIONS</p><h2>AI IPFS Website Builder: the details</h2><div class="faq-list"><details class="faq"><summary>Does this website contain a live AI builder?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>No. This section provides an evaluation and publishing workflow for developers using AI-assisted tools. It does not offer an interactive generation service.</p></div></details><details class="faq"><summary>Can a polished preview prove an export is ready?<span aria-hidden="true" class="faq-plus">+</span></summary><div><p>No. Test the actual files under static hosting, including direct nested routes and all required assets, without relying on the preview server.</p></div></details></div></section><section class="section wrap"><div class="section-heading"><div><p class="eyebrow">FIELD GUIDES</p><h2>Go deeper in the Website Lab</h2></div><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid two-posts"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: AI CAN DRAFT. YOU VERIFY." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ai-ipfs-website-builder-static-export-checklist-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/">AI IPFS website builder checklist: review the export before publishing</a></h3><p>Evaluate generated sites by their actual files, dependencies, accessibility, metadata, and release behavior—not by a convincing preview.</p><div class="post-bottom"><time datetime="2026-09-17">September 17, 2026</time><a aria-label="Read AI IPFS website builder checklist: review the export before publishing" class="card-arrow" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: EDIT CONTENT. PUBLISH A CID." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-headless-cms-publishing-workflow-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/">An IPFS website CMS workflow: edit privately, publish static releases</a></h3><p>Design a content workflow that separates authoring, previews, approvals, static output, and IPFS publication without exposing the CMS to every visitor.</p><div class="post-bottom"><time datetime="2024-02-19">February 19, 2024</time><a aria-label="Read An IPFS website CMS workflow: edit privately, publish static releases" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section>]]></content:encoded>
    </item>
    <item>
      <title>About the IPFS Website Lab | IPFSwebsite.com</title>
      <link>https://ipfswebsite.com/about/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/about/</guid>
      <description>Meet the purpose and editorial approach behind IPFSwebsite.com: practical, source-linked guides to static publishing and IPFS architecture.</description>
      <content:encoded><![CDATA[<section class="text-hero wrap"><p class="eyebrow">ABOUT IPFSWEBSITE.COM</p><h1>Clear guidance.<br/>Fewer assumptions.</h1><p class="hero-lead">An independent learning resource for developers and publishers who want to understand what it takes to publish a website on IPFS.</p></section><section class="wrap about-grid"><div class="prose"><h2>A practical view of publishing</h2><p>IPFSwebsite.com focuses on the work between a source project and a website a reader can actually use. That includes complete static output, understandable content addresses, retained copies, usable delivery routes, and a deliberate update process.</p><p>The guides cover first websites, hosting architecture, Hugo, content management systems, self-operated nodes, and the frontend boundaries around Ethereum, Solana, and stablecoin-related applications. The AI builder section applies the same release checks to generated exports.</p><h2 id="editorial">IPFS Website Lab</h2><p>The IPFS Website Lab is the editorial collection on this site. Its field guides work through concrete decisions, limitations, and checks you can apply in your own environment. Articles link to relevant primary documentation and connect to the topic guides that explain the wider architecture.</p><p>Technical documentation can change. Before using a command or configuration in production, check the cited project documentation for your installed version and operating context. A tutorial is a starting point for a tested workflow, not a guarantee about an unreviewed deployment.</p><h2>What this site does—and does not do</h2><p>This is a publishing and architecture resource. It does not operate an interactive hosting dashboard, accept deposits, provide custody, or ask readers to connect wallets. Product and project names identify topics and reference documentation, not claimed partnerships.</p><p>There are no account forms, newsletter forms, or on-site payment flows. The contact page provides an email address for questions and corrections. Keep private credentials, wallet recovery phrases, and sensitive customer information out of any message.</p><h2>Make the guides more useful</h2><p>A precise correction is valuable: include the page, the statement or command at issue, the relevant version, and a primary reference when available. For a new topic, describe the publishing task and the decision that is difficult to resolve.</p><p><a class="text-link" href="https://ipfswebsite.com/contact/">Contact the IPFS Website Lab</a> or <a class="text-link" href="https://ipfswebsite.com/blog/">browse the complete guide collection</a>.</p></div><aside class="about-principles"><p class="eyebrow">THE EDITORIAL APPROACH</p><article><span>01</span><h3>Explain the boundary</h3><p>Storage is not delivery. A frontend is not a blockchain. A preview is not a release.</p></article><article><span>02</span><h3>Prefer inspectable work</h3><p>Complete files, clear configuration, primary references, and checks you can repeat.</p></article><article><span>03</span><h3>Keep claims proportionate</h3><p>No invented metrics, testimonials, partnerships, or promises of permanent availability.</p></article></aside></section>]]></content:encoded>
    </item>
    <item>
      <title>Getting started Collection | IPFS Website Lab</title>
      <link>https://ipfswebsite.com/blog/category/getting-started/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/category/getting-started/</guid>
      <description>Start with a complete folder. The first release is where the publishing model becomes concrete. Learn how HTML, stylesheets, scripts, and images become a directory…</description>
      <content:encoded><![CDATA[<section class="text-hero wrap archive-hero"><p class="eyebrow">IPFS WEBSITE LAB / COLLECTION</p><h1>Getting started</h1><p class="archive-headline">Start with a complete folder.</p><p class="hero-lead">The first release is where the publishing model becomes concrete. Learn how HTML, stylesheets, scripts, and images become a directory you can test, identify, and retain. Begin with ordinary static routes before adding a CMS, a blockchain interface, or a custom delivery stack.</p><div class="archive-context"><p>Use this collection to move from unfamiliar terms to a repeatable first deployment. Check a nested page directly, inspect the output for private material, record the root CID, and identify who will keep the content available. A successful upload is one milestone; a usable public release also needs working navigation, assets, delivery, and a recovery plan.</p><p>Start with <a class="text-link" href="https://ipfswebsite.com/ipfs-website/">IPFS Website</a> or <a class="text-link" href="https://ipfswebsite.com/ipfs-static-website/">IPFS Static Website</a>, then continue with the field guides below.</p></div></section><section class="wrap blog-list"><div class="archive-toolbar"><p>1 field guide in this collection</p><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: YOUR FIRST IPFS WEBSITE." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/build-your-first-ipfs-static-website-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/getting-started/">Getting started</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/">Build your first IPFS static website: from folder to CID</a></h3><p>Prepare a portable static site, publish the right directory, and check that every page and asset survives the move to IPFS.</p><div class="post-bottom"><time datetime="2024-06-07">June 7, 2024</time><a aria-label="Read Build your first IPFS static website: from folder to CID" class="card-arrow" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section><section class="section wrap tag-section"><h2>Keep exploring.</h2><nav aria-label="Related guide collections" class="tag-cloud"><a class="filter-pill" href="https://ipfswebsite.com/blog/category/getting-started/">Getting started</a><a class="filter-pill" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><a class="filter-pill" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><a class="filter-pill" href="https://ipfswebsite.com/blog/category/web3/">Web3</a></nav></section>]]></content:encoded>
    </item>
    <item>
      <title>Infrastructure Collection | IPFS Website Lab</title>
      <link>https://ipfswebsite.com/blog/category/infrastructure/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/category/infrastructure/</guid>
      <description>Keep content reachable. Hosting is a set of responsibilities rather than a single storage number. Explore retained copies, gateways, readable names, self-operated…</description>
      <content:encoded><![CDATA[<section class="text-hero wrap archive-hero"><p class="eyebrow">IPFS WEBSITE LAB / COLLECTION</p><h1>Infrastructure</h1><p class="archive-headline">Keep content reachable.</p><p class="hero-lead">Hosting is a set of responsibilities rather than a single storage number. Explore retained copies, gateways, readable names, self-operated nodes, and the operating work around them. Separate each layer before comparing providers or changing production configuration.</p><div class="archive-context"><p>Read the hosting guide for the cost and responsibility model, the domain guide for DNSLink and HTTPS, and the VPS checklist for self-operation. Keep a release manifest and meaningful retrieval checks across all three. The practical goal is not an unsupported promise of permanent availability; it is an architecture whose dependencies, limits, and recovery path you understand.</p><p>Start with <a class="text-link" href="https://ipfswebsite.com/ipfs-website-hosting/">IPFS Website Hosting</a> or <a class="text-link" href="https://ipfswebsite.com/ipfs-hosting/">IPFS Hosting</a>, then continue with the field guides below.</p></div></section><section class="wrap blog-list"><div class="archive-toolbar"><p>3 field guides in this collection</p><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: YOUR NODE. YOUR PLAYBOOK." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/run-ipfs-kubo-on-a-vps-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/">Run IPFS on a VPS: a practical Kubo operations checklist</a></h3><p>Plan a node around administrative boundaries, storage, monitoring, retained releases, and recovery—not just a successful daemon start.</p><div class="post-bottom"><time datetime="2025-09-06">September 6, 2025</time><a aria-label="Read Run IPFS on a VPS: a practical Kubo operations checklist" class="card-arrow" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: PIN THE SITE. PLAN THE COST." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-hosting-pinning-and-costs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/">IPFS hosting, pinning, and costs: plan the whole delivery path</a></h3><p>Compare local nodes, managed pinning, and gateway delivery without treating an upload or a cached page as an availability guarantee.</p><div class="post-bottom"><time datetime="2025-01-14">January 14, 2025</time><a aria-label="Read IPFS hosting, pinning, and costs: plan the whole delivery path" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: YOUR DOMAIN. YOUR CONTENT." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-dnslink-custom-domain-gateways-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/">DNSLink and IPFS gateways: connect a domain without breaking releases</a></h3><p>Understand what DNSLink changes, what HTTPS delivery still needs, and how to test a custom domain before switching its published release.</p><div class="post-bottom"><time datetime="2024-10-23">October 23, 2024</time><a aria-label="Read DNSLink and IPFS gateways: connect a domain without breaking releases" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section><section class="section wrap tag-section"><h2>Keep exploring.</h2><nav aria-label="Related guide collections" class="tag-cloud"><a class="filter-pill" href="https://ipfswebsite.com/blog/category/getting-started/">Getting started</a><a class="filter-pill" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><a class="filter-pill" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><a class="filter-pill" href="https://ipfswebsite.com/blog/category/web3/">Web3</a></nav></section>]]></content:encoded>
    </item>
    <item>
      <title>Publishing Collection | IPFS Website Lab</title>
      <link>https://ipfswebsite.com/blog/category/publishing/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/category/publishing/</guid>
      <description>Make authoring a release process. A generator, CMS, or AI-assisted tool can help produce content, but the public artifact still needs to stand on its own. These…</description>
      <content:encoded><![CDATA[<section class="text-hero wrap archive-hero"><p class="eyebrow">IPFS WEBSITE LAB / COLLECTION</p><h1>Publishing</h1><p class="archive-headline">Make authoring a release process.</p><p class="hero-lead">A generator, CMS, or AI-assisted tool can help produce content, but the public artifact still needs to stand on its own. These guides connect authoring decisions to complete static output, readable routes, usable assets, and a controlled publication workflow.</p><div class="archive-context"><p>Start with the tool closest to your existing process, then review the shared release checks. Keep previews separate from production, drafts separate from public files, and credentials separate from browser bundles. Test archives and feeds alongside the visible pages. A useful workflow records which source revision became which CID and changes the public pointer only after the release is ready.</p><p>Start with <a class="text-link" href="https://ipfswebsite.com/ipfs-hugo-website/">IPFS Hugo Website</a> or <a class="text-link" href="https://ipfswebsite.com/ipfs-website-cms/">IPFS Website CMS</a>, then continue with the field guides below.</p></div></section><section class="wrap blog-list"><div class="archive-toolbar"><p>3 field guides in this collection</p><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: AI CAN DRAFT. YOU VERIFY." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ai-ipfs-website-builder-static-export-checklist-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/">AI IPFS website builder checklist: review the export before publishing</a></h3><p>Evaluate generated sites by their actual files, dependencies, accessibility, metadata, and release behavior—not by a convincing preview.</p><div class="post-bottom"><time datetime="2026-09-17">September 17, 2026</time><a aria-label="Read AI IPFS website builder checklist: review the export before publishing" class="card-arrow" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: HUGO TO IPFS. BUILD IT RIGHT." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/publish-hugo-website-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/">Publish a Hugo website on IPFS: URLs, assets, and repeatable builds</a></h3><p>Turn a Hugo project into a portable static release, inspect its generated routes, and keep canonical metadata separate from delivery paths.</p><div class="post-bottom"><time datetime="2025-05-28">May 28, 2025</time><a aria-label="Read Publish a Hugo website on IPFS: URLs, assets, and repeatable builds" class="card-arrow" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: EDIT CONTENT. PUBLISH A CID." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-headless-cms-publishing-workflow-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/">An IPFS website CMS workflow: edit privately, publish static releases</a></h3><p>Design a content workflow that separates authoring, previews, approvals, static output, and IPFS publication without exposing the CMS to every visitor.</p><div class="post-bottom"><time datetime="2024-02-19">February 19, 2024</time><a aria-label="Read An IPFS website CMS workflow: edit privately, publish static releases" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section><section class="section wrap tag-section"><h2>Keep exploring.</h2><nav aria-label="Related guide collections" class="tag-cloud"><a class="filter-pill" href="https://ipfswebsite.com/blog/category/getting-started/">Getting started</a><a class="filter-pill" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><a class="filter-pill" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><a class="filter-pill" href="https://ipfswebsite.com/blog/category/web3/">Web3</a></nav></section>]]></content:encoded>
    </item>
    <item>
      <title>Web3 Collection | IPFS Website Lab</title>
      <link>https://ipfswebsite.com/blog/category/web3/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/category/web3/</guid>
      <description>Keep the frontend boundary clear. Ethereum, Solana, and stablecoin-related interfaces can use IPFS to distribute public files while depending on live networks and…</description>
      <content:encoded><![CDATA[<section class="text-hero wrap archive-hero"><p class="eyebrow">IPFS WEBSITE LAB / COLLECTION</p><h1>Web3</h1><p class="archive-headline">Keep the frontend boundary clear.</p><p class="hero-lead">Ethereum, Solana, and stablecoin-related interfaces can use IPFS to distribute public files while depending on live networks and services for application behavior. These guides focus on those boundaries: browser origins, wallets, network configuration, authorization, and transaction observation.</p><div class="archive-context"><p>Begin with the architecture for your actual network rather than copying another chain’s assumptions. Let readers understand the interface before connecting a wallet, identify destinations explicitly, and distinguish submission from an observed outcome. Use appropriate test environments for failure cases. A CID can identify a frontend release; it does not audit its contracts, protect asset value, or replace careful application design.</p><p>Start with <a class="text-link" href="https://ipfswebsite.com/ipfs-website-dapp/">IPFS Website dApp</a> or <a class="text-link" href="https://ipfswebsite.com/ipfs-ethereum-website/">IPFS Ethereum Website</a>, then continue with the field guides below.</p></div></section><section class="wrap blog-list"><div class="archive-toolbar"><p>3 field guides in this collection</p><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: CLEAR ASSETS. CLEAR ACTIONS." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-stablecoin-interface-safety-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/">IPFS and stablecoin interfaces: verify networks, assets, and payment states</a></h3><p>Plan a stablecoin-related frontend around asset identity, explicit authorization, public-data boundaries, and reliable transaction observation.</p><div class="post-bottom"><time datetime="2026-06-24">June 24, 2026</time><a aria-label="Read IPFS and stablecoin interfaces: verify networks, assets, and payment states" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: SOLANA UI. IPFS DELIVERY." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/solana-website-frontend-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/">A Solana website on IPFS: design the frontend around transaction states</a></h3><p>Prepare a static Solana interface with explicit clusters, wallet behavior, RPC dependencies, and a transaction flow that handles uncertainty.</p><div class="post-bottom"><time datetime="2026-02-11">February 11, 2026</time><a aria-label="Read A Solana website on IPFS: design the frontend around transaction states" class="card-arrow" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: HOST THE UI. NOT THE CHAIN." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ethereum-dapp-frontend-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/">An Ethereum dApp frontend on IPFS: separate hosting from execution</a></h3><p>Map the frontend, wallet, RPC endpoint, and contract before publishing an Ethereum interface as a content-addressed release.</p><div class="post-bottom"><time datetime="2025-11-18">November 18, 2025</time><a aria-label="Read An Ethereum dApp frontend on IPFS: separate hosting from execution" class="card-arrow" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section><section class="section wrap tag-section"><h2>Keep exploring.</h2><nav aria-label="Related guide collections" class="tag-cloud"><a class="filter-pill" href="https://ipfswebsite.com/blog/category/getting-started/">Getting started</a><a class="filter-pill" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><a class="filter-pill" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><a class="filter-pill" href="https://ipfswebsite.com/blog/category/web3/">Web3</a></nav></section>]]></content:encoded>
    </item>
    <item>
      <title>Static sites Guides | IPFS Website Lab</title>
      <link>https://ipfswebsite.com/blog/tag/static-sites/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/tag/static-sites/</guid>
      <description>Files that work beyond the preview. Follow the static artifact from hand-authored pages to Hugo, CMS, and AI-assisted exports. The common requirement is a complete…</description>
      <content:encoded><![CDATA[<section class="text-hero wrap archive-hero"><p class="eyebrow">IPFS WEBSITE LAB / TOPIC</p><h1>Static sites</h1><p class="archive-headline">Files that work beyond the preview.</p><p class="hero-lead">Follow the static artifact from hand-authored pages to Hugo, CMS, and AI-assisted exports. The common requirement is a complete directory that can be inspected without depending on a development server.</p><div class="archive-context"><p>Pay particular attention to real route directories, nested resource paths, locally included assets, and the difference between a public bundle and private source material. Test direct links as well as homepage navigation. These guides approach the same release boundary from different authoring workflows, so you can keep the tools that suit your team while applying a consistent output checklist.</p><p>Start with <a class="text-link" href="https://ipfswebsite.com/ipfs-static-website/">IPFS Static Website</a> or <a class="text-link" href="https://ipfswebsite.com/ipfs-hugo-website/">IPFS Hugo Website</a>, then continue with the field guides below.</p></div></section><section class="wrap blog-list"><div class="archive-toolbar"><p>4 field guides in this topic</p><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: AI CAN DRAFT. YOU VERIFY." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ai-ipfs-website-builder-static-export-checklist-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/">AI IPFS website builder checklist: review the export before publishing</a></h3><p>Evaluate generated sites by their actual files, dependencies, accessibility, metadata, and release behavior—not by a convincing preview.</p><div class="post-bottom"><time datetime="2026-09-17">September 17, 2026</time><a aria-label="Read AI IPFS website builder checklist: review the export before publishing" class="card-arrow" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: HUGO TO IPFS. BUILD IT RIGHT." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/publish-hugo-website-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/">Publish a Hugo website on IPFS: URLs, assets, and repeatable builds</a></h3><p>Turn a Hugo project into a portable static release, inspect its generated routes, and keep canonical metadata separate from delivery paths.</p><div class="post-bottom"><time datetime="2025-05-28">May 28, 2025</time><a aria-label="Read Publish a Hugo website on IPFS: URLs, assets, and repeatable builds" class="card-arrow" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: YOUR FIRST IPFS WEBSITE." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/build-your-first-ipfs-static-website-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/getting-started/">Getting started</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/">Build your first IPFS static website: from folder to CID</a></h3><p>Prepare a portable static site, publish the right directory, and check that every page and asset survives the move to IPFS.</p><div class="post-bottom"><time datetime="2024-06-07">June 7, 2024</time><a aria-label="Read Build your first IPFS static website: from folder to CID" class="card-arrow" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: EDIT CONTENT. PUBLISH A CID." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-headless-cms-publishing-workflow-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/">An IPFS website CMS workflow: edit privately, publish static releases</a></h3><p>Design a content workflow that separates authoring, previews, approvals, static output, and IPFS publication without exposing the CMS to every visitor.</p><div class="post-bottom"><time datetime="2024-02-19">February 19, 2024</time><a aria-label="Read An IPFS website CMS workflow: edit privately, publish static releases" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section><section class="section wrap tag-section"><h2>Keep exploring.</h2><nav aria-label="Related guide collections" class="tag-cloud"><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/static-sites/">Static sites</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/pinning/">Pinning</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/dnslink/">DNSLink</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/publishing/">Publishing</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/security/">Security</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/dapps/">dApps</a></nav></section>]]></content:encoded>
    </item>
    <item>
      <title>Pinning Guides | IPFS Website Lab</title>
      <link>https://ipfswebsite.com/blog/tag/pinning/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/tag/pinning/</guid>
      <description>Retention needs an owner. Pinning connects an approved release to infrastructure expected to retain it. These guides introduce that responsibility, compare operating…</description>
      <content:encoded><![CDATA[<section class="text-hero wrap archive-hero"><p class="eyebrow">IPFS WEBSITE LAB / TOPIC</p><h1>Pinning</h1><p class="archive-headline">Retention needs an owner.</p><p class="hero-lead">Pinning connects an approved release to infrastructure expected to retain it. These guides introduce that responsibility, compare operating models, and carry it into a self-operated node checklist.</p><div class="archive-context"><p>Do not use a cached browser response as a substitute for checking the retained release. Record which root CIDs matter, where copies are kept, and who receives a failed retrieval alert. Include a previous working release in a deliberate rollback plan. Reading the first-site and hosting guides together makes it easier to distinguish a successful upload from an ongoing availability arrangement.</p><p>Start with <a class="text-link" href="https://ipfswebsite.com/ipfs-website-hosting/">IPFS Website Hosting</a> or <a class="text-link" href="https://ipfswebsite.com/ipfs-vps/">IPFS VPS</a>, then continue with the field guides below.</p></div></section><section class="wrap blog-list"><div class="archive-toolbar"><p>3 field guides in this topic</p><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: YOUR NODE. YOUR PLAYBOOK." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/run-ipfs-kubo-on-a-vps-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/">Run IPFS on a VPS: a practical Kubo operations checklist</a></h3><p>Plan a node around administrative boundaries, storage, monitoring, retained releases, and recovery—not just a successful daemon start.</p><div class="post-bottom"><time datetime="2025-09-06">September 6, 2025</time><a aria-label="Read Run IPFS on a VPS: a practical Kubo operations checklist" class="card-arrow" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: PIN THE SITE. PLAN THE COST." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-hosting-pinning-and-costs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/">IPFS hosting, pinning, and costs: plan the whole delivery path</a></h3><p>Compare local nodes, managed pinning, and gateway delivery without treating an upload or a cached page as an availability guarantee.</p><div class="post-bottom"><time datetime="2025-01-14">January 14, 2025</time><a aria-label="Read IPFS hosting, pinning, and costs: plan the whole delivery path" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-hosting-pinning-and-costs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: YOUR FIRST IPFS WEBSITE." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/build-your-first-ipfs-static-website-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/getting-started/">Getting started</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/">Build your first IPFS static website: from folder to CID</a></h3><p>Prepare a portable static site, publish the right directory, and check that every page and asset survives the move to IPFS.</p><div class="post-bottom"><time datetime="2024-06-07">June 7, 2024</time><a aria-label="Read Build your first IPFS static website: from folder to CID" class="card-arrow" href="https://ipfswebsite.com/blog/build-your-first-ipfs-static-website/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section><section class="section wrap tag-section"><h2>Keep exploring.</h2><nav aria-label="Related guide collections" class="tag-cloud"><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/static-sites/">Static sites</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/pinning/">Pinning</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/dnslink/">DNSLink</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/publishing/">Publishing</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/security/">Security</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/dapps/">dApps</a></nav></section>]]></content:encoded>
    </item>
    <item>
      <title>DNSLink Guides | IPFS Website Lab</title>
      <link>https://ipfswebsite.com/blog/tag/dnslink/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/tag/dnslink/</guid>
      <description>Connect names to approved releases. DNSLink is useful when a memorable name should signal a content path. It belongs alongside, not in place of, your plan for…</description>
      <content:encoded><![CDATA[<section class="text-hero wrap archive-hero"><p class="eyebrow">IPFS WEBSITE LAB / TOPIC</p><h1>DNSLink</h1><p class="archive-headline">Connect names to approved releases.</p><p class="hero-lead">DNSLink is useful when a memorable name should signal a content path. It belongs alongside, not in place of, your plan for ordinary HTTPS delivery and retained content.</p><div class="archive-context"><p>Review the domain guide for naming and delivery boundaries, then the Hugo guide for canonical metadata and generated links. Keep the preferred public domain consistent while testing the actual gateway context. Record the previous value before a release change and keep its content available during the transition. A readable name is most useful when it points to an already tested artifact.</p><p>Start with <a class="text-link" href="https://ipfswebsite.com/ipfs-hosting/">IPFS Hosting</a> or <a class="text-link" href="https://ipfswebsite.com/ipfs-hugo-website/">IPFS Hugo Website</a>, then continue with the field guides below.</p></div></section><section class="wrap blog-list"><div class="archive-toolbar"><p>2 field guides in this topic</p><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: HUGO TO IPFS. BUILD IT RIGHT." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/publish-hugo-website-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/">Publish a Hugo website on IPFS: URLs, assets, and repeatable builds</a></h3><p>Turn a Hugo project into a portable static release, inspect its generated routes, and keep canonical metadata separate from delivery paths.</p><div class="post-bottom"><time datetime="2025-05-28">May 28, 2025</time><a aria-label="Read Publish a Hugo website on IPFS: URLs, assets, and repeatable builds" class="card-arrow" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: YOUR DOMAIN. YOUR CONTENT." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-dnslink-custom-domain-gateways-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/">DNSLink and IPFS gateways: connect a domain without breaking releases</a></h3><p>Understand what DNSLink changes, what HTTPS delivery still needs, and how to test a custom domain before switching its published release.</p><div class="post-bottom"><time datetime="2024-10-23">October 23, 2024</time><a aria-label="Read DNSLink and IPFS gateways: connect a domain without breaking releases" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section><section class="section wrap tag-section"><h2>Keep exploring.</h2><nav aria-label="Related guide collections" class="tag-cloud"><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/static-sites/">Static sites</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/pinning/">Pinning</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/dnslink/">DNSLink</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/publishing/">Publishing</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/security/">Security</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/dapps/">dApps</a></nav></section>]]></content:encoded>
    </item>
    <item>
      <title>Publishing Guides | IPFS Website Lab</title>
      <link>https://ipfswebsite.com/blog/tag/publishing/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/tag/publishing/</guid>
      <description>From an edit to a public artifact. These guides connect domain updates, static generation, editorial approval, and generated-code review into an understandable…</description>
      <content:encoded><![CDATA[<section class="text-hero wrap archive-hero"><p class="eyebrow">IPFS WEBSITE LAB / TOPIC</p><h1>Publishing</h1><p class="archive-headline">From an edit to a public artifact.</p><p class="hero-lead">These guides connect domain updates, static generation, editorial approval, and generated-code review into an understandable publishing process. Each workflow should end with a complete release rather than a collection of assumptions about the preview environment.</p><div class="archive-context"><p>Choose the guide that matches the source of your content, then inspect its neighboring workflows. A CMS needs private drafts and clear approval states; a generator needs verified output; an AI-assisted export needs careful claim and dependency review. Across them all, retain the artifact, record its identity, test the reader’s route, and change the public pointer last.</p><p>Start with <a class="text-link" href="https://ipfswebsite.com/ipfs-website-cms/">IPFS Website CMS</a> or <a class="text-link" href="https://ipfswebsite.com/ai-ipfs-website-builder/">AI IPFS Website Builder</a>, then continue with the field guides below.</p></div></section><section class="wrap blog-list"><div class="archive-toolbar"><p>4 field guides in this topic</p><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: AI CAN DRAFT. YOU VERIFY." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ai-ipfs-website-builder-static-export-checklist-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/">AI IPFS website builder checklist: review the export before publishing</a></h3><p>Evaluate generated sites by their actual files, dependencies, accessibility, metadata, and release behavior—not by a convincing preview.</p><div class="post-bottom"><time datetime="2026-09-17">September 17, 2026</time><a aria-label="Read AI IPFS website builder checklist: review the export before publishing" class="card-arrow" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: HUGO TO IPFS. BUILD IT RIGHT." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/publish-hugo-website-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/">Publish a Hugo website on IPFS: URLs, assets, and repeatable builds</a></h3><p>Turn a Hugo project into a portable static release, inspect its generated routes, and keep canonical metadata separate from delivery paths.</p><div class="post-bottom"><time datetime="2025-05-28">May 28, 2025</time><a aria-label="Read Publish a Hugo website on IPFS: URLs, assets, and repeatable builds" class="card-arrow" href="https://ipfswebsite.com/blog/publish-hugo-website-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: YOUR DOMAIN. YOUR CONTENT." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-dnslink-custom-domain-gateways-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/">DNSLink and IPFS gateways: connect a domain without breaking releases</a></h3><p>Understand what DNSLink changes, what HTTPS delivery still needs, and how to test a custom domain before switching its published release.</p><div class="post-bottom"><time datetime="2024-10-23">October 23, 2024</time><a aria-label="Read DNSLink and IPFS gateways: connect a domain without breaking releases" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-dnslink-custom-domain-gateways/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: EDIT CONTENT. PUBLISH A CID." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-headless-cms-publishing-workflow-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/">An IPFS website CMS workflow: edit privately, publish static releases</a></h3><p>Design a content workflow that separates authoring, previews, approvals, static output, and IPFS publication without exposing the CMS to every visitor.</p><div class="post-bottom"><time datetime="2024-02-19">February 19, 2024</time><a aria-label="Read An IPFS website CMS workflow: edit privately, publish static releases" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-headless-cms-publishing-workflow/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section><section class="section wrap tag-section"><h2>Keep exploring.</h2><nav aria-label="Related guide collections" class="tag-cloud"><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/static-sites/">Static sites</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/pinning/">Pinning</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/dnslink/">DNSLink</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/publishing/">Publishing</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/security/">Security</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/dapps/">dApps</a></nav></section>]]></content:encoded>
    </item>
    <item>
      <title>Security Guides | IPFS Website Lab</title>
      <link>https://ipfswebsite.com/blog/tag/security/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/tag/security/</guid>
      <description>Review what each boundary protects. Security-sensitive publishing decisions include node administration, public bundles, wallet authorization, transaction…</description>
      <content:encoded><![CDATA[<section class="text-hero wrap archive-hero"><p class="eyebrow">IPFS WEBSITE LAB / TOPIC</p><h1>Security</h1><p class="archive-headline">Review what each boundary protects.</p><p class="hero-lead">Security-sensitive publishing decisions include node administration, public bundles, wallet authorization, transaction observation, and the material an AI-assisted workflow is allowed to trust. These articles focus on concrete checks rather than a claim that one technology removes all risk.</p><div class="archive-context"><p>Start with the component you operate. Keep private credentials out of static files and administrative interfaces out of public delivery routes. Make user authorization explicit and treat uncertain outcomes honestly. A content address identifies the material delivered; it does not establish that the material is safe. Match the review to the actual application and test the exact release you intend to publish.</p><p>Start with <a class="text-link" href="https://ipfswebsite.com/ipfs-vps/">IPFS VPS</a> or <a class="text-link" href="https://ipfswebsite.com/ipfs-website-dapp/">IPFS Website dApp</a>, then continue with the field guides below.</p></div></section><section class="wrap blog-list"><div class="archive-toolbar"><p>5 field guides in this topic</p><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: AI CAN DRAFT. YOU VERIFY." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ai-ipfs-website-builder-static-export-checklist-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/publishing/">Publishing</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/">AI IPFS website builder checklist: review the export before publishing</a></h3><p>Evaluate generated sites by their actual files, dependencies, accessibility, metadata, and release behavior—not by a convincing preview.</p><div class="post-bottom"><time datetime="2026-09-17">September 17, 2026</time><a aria-label="Read AI IPFS website builder checklist: review the export before publishing" class="card-arrow" href="https://ipfswebsite.com/blog/ai-ipfs-website-builder-static-export-checklist/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: CLEAR ASSETS. CLEAR ACTIONS." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-stablecoin-interface-safety-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/">IPFS and stablecoin interfaces: verify networks, assets, and payment states</a></h3><p>Plan a stablecoin-related frontend around asset identity, explicit authorization, public-data boundaries, and reliable transaction observation.</p><div class="post-bottom"><time datetime="2026-06-24">June 24, 2026</time><a aria-label="Read IPFS and stablecoin interfaces: verify networks, assets, and payment states" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: SOLANA UI. IPFS DELIVERY." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/solana-website-frontend-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/">A Solana website on IPFS: design the frontend around transaction states</a></h3><p>Prepare a static Solana interface with explicit clusters, wallet behavior, RPC dependencies, and a transaction flow that handles uncertainty.</p><div class="post-bottom"><time datetime="2026-02-11">February 11, 2026</time><a aria-label="Read A Solana website on IPFS: design the frontend around transaction states" class="card-arrow" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: HOST THE UI. NOT THE CHAIN." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ethereum-dapp-frontend-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/">An Ethereum dApp frontend on IPFS: separate hosting from execution</a></h3><p>Map the frontend, wallet, RPC endpoint, and contract before publishing an Ethereum interface as a content-addressed release.</p><div class="post-bottom"><time datetime="2025-11-18">November 18, 2025</time><a aria-label="Read An Ethereum dApp frontend on IPFS: separate hosting from execution" class="card-arrow" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: YOUR NODE. YOUR PLAYBOOK." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/run-ipfs-kubo-on-a-vps-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/infrastructure/">Infrastructure</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/">Run IPFS on a VPS: a practical Kubo operations checklist</a></h3><p>Plan a node around administrative boundaries, storage, monitoring, retained releases, and recovery—not just a successful daemon start.</p><div class="post-bottom"><time datetime="2025-09-06">September 6, 2025</time><a aria-label="Read Run IPFS on a VPS: a practical Kubo operations checklist" class="card-arrow" href="https://ipfswebsite.com/blog/run-ipfs-kubo-on-a-vps/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section><section class="section wrap tag-section"><h2>Keep exploring.</h2><nav aria-label="Related guide collections" class="tag-cloud"><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/static-sites/">Static sites</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/pinning/">Pinning</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/dnslink/">DNSLink</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/publishing/">Publishing</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/security/">Security</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/dapps/">dApps</a></nav></section>]]></content:encoded>
    </item>
    <item>
      <title>dApps Guides | IPFS Website Lab</title>
      <link>https://ipfswebsite.com/blog/tag/dapps/</link>
      <guid isPermaLink="true">https://ipfswebsite.com/blog/tag/dapps/</guid>
      <description>A frontend is one layer of the application. Use these guides to distinguish the static interface from its wallets, RPC endpoints, contracts or programs, and any…</description>
      <content:encoded><![CDATA[<section class="text-hero wrap archive-hero"><p class="eyebrow">IPFS WEBSITE LAB / TOPIC</p><h1>dApps</h1><p class="archive-headline">A frontend is one layer of the application.</p><p class="hero-lead">Use these guides to distinguish the static interface from its wallets, RPC endpoints, contracts or programs, and any payment-related observation services. The architecture becomes easier to test when every responsibility has a name.</p><div class="archive-context"><p>Ethereum and Solana have different transaction models, so apply the guide for the network actually supported by your project. Stablecoin-related interfaces add asset identity and payment-state questions that deserve their own review. Keep important information accessible before a wallet connection, show meaningful destinations, and record the frontend release alongside its expected runtime configuration.</p><p>Start with <a class="text-link" href="https://ipfswebsite.com/ipfs-website-dapp/">IPFS Website dApp</a> or <a class="text-link" href="https://ipfswebsite.com/ipfs-stablecoins/">IPFS Stablecoins</a>, then continue with the field guides below.</p></div></section><section class="wrap blog-list"><div class="archive-toolbar"><p>3 field guides in this topic</p><a class="text-link" href="https://ipfswebsite.com/blog/">All field guides <svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M5 12h14M13 6l6 6-6 6"></path></svg></a></div><div class="post-grid"><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: CLEAR ASSETS. CLEAR ACTIONS." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ipfs-stablecoin-interface-safety-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/">IPFS and stablecoin interfaces: verify networks, assets, and payment states</a></h3><p>Plan a stablecoin-related frontend around asset identity, explicit authorization, public-data boundaries, and reliable transaction observation.</p><div class="post-bottom"><time datetime="2026-06-24">June 24, 2026</time><a aria-label="Read IPFS and stablecoin interfaces: verify networks, assets, and payment states" class="card-arrow" href="https://ipfswebsite.com/blog/ipfs-stablecoin-interface-safety/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: SOLANA UI. IPFS DELIVERY." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/solana-website-frontend-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/">A Solana website on IPFS: design the frontend around transaction states</a></h3><p>Prepare a static Solana interface with explicit clusters, wallet behavior, RPC dependencies, and a transaction flow that handles uncertainty.</p><div class="post-bottom"><time datetime="2026-02-11">February 11, 2026</time><a aria-label="Read A Solana website on IPFS: design the frontend around transaction states" class="card-arrow" href="https://ipfswebsite.com/blog/solana-website-frontend-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article><article class="post-card"><a aria-hidden="true" class="post-image" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/" tabindex="-1"><picture class=""><source sizes="(max-width: 640px) 92vw, (max-width: 1000px) 45vw, 390px" type="image/webp"/><img alt="Neon editorial card: HOST THE UI. NOT THE CHAIN." decoding="async" height="1200" loading="lazy" src="https://ipfswebsite.com/assets/images/ethereum-dapp-frontend-on-ipfs-ipfswebsite.png" width="1200"/></picture></a><div class="post-copy"><div class="post-meta"><a class="" href="https://ipfswebsite.com/blog/category/web3/">Web3</a><span>7 min read</span></div><h3><a class="" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/">An Ethereum dApp frontend on IPFS: separate hosting from execution</a></h3><p>Map the frontend, wallet, RPC endpoint, and contract before publishing an Ethereum interface as a content-addressed release.</p><div class="post-bottom"><time datetime="2025-11-18">November 18, 2025</time><a aria-label="Read An Ethereum dApp frontend on IPFS: separate hosting from execution" class="card-arrow" href="https://ipfswebsite.com/blog/ethereum-dapp-frontend-on-ipfs/"><svg aria-hidden="true" class="icon" fill="none" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.7" viewbox="0 0 24 24" width="24"><path d="M6 18L18 6M6 6h12v12"></path></svg></a></div></div></article></div></section><section class="section wrap tag-section"><h2>Keep exploring.</h2><nav aria-label="Related guide collections" class="tag-cloud"><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/static-sites/">Static sites</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/pinning/">Pinning</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/dnslink/">DNSLink</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/publishing/">Publishing</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/security/">Security</a><a class="tag-pill" href="https://ipfswebsite.com/blog/tag/dapps/">dApps</a></nav></section>]]></content:encoded>
    </item>
  </channel>
</rss>
