Skip to content

Add new blogs#2802

Merged
adityaoberai merged 58 commits intomainfrom
add-new-blogs-aditya
Mar 20, 2026
Merged

Add new blogs#2802
adityaoberai merged 58 commits intomainfrom
add-new-blogs-aditya

Conversation

@adityaoberai
Copy link
Member

@adityaoberai adityaoberai commented Mar 13, 2026

What does this PR do?

(Provide a description of what this PR does.)

Test Plan

(Write your test plan here. If you changed any code, please provide us with clear instructions on how you verified your changes work.)

Related PRs and Issues

(If this PR is related to any other PR or resolves any issue or related to any issue link all related PR and issues here.)

Have you read the Contributing Guidelines on issues?

(Write your answer here.)

Summary by CodeRabbit

  • Documentation
    • Added many new in-depth blog posts covering backend topics: security & compliance, self‑hosting, scalable backends, internal tools, file uploads, vendor/platform comparisons, productivity, migration guidance, HIPAA/BAA, developer compliance practices, tutorials, and practical how‑tos for startups and agencies.
  • Assets
    • Added numerous new cover images for blog posts to improve visual presentation and consistency.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 13, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

This PR adds numerous new blog posts as Markdoc pages under src/routes/blog/post, each with front matter and full article content on topics like backend comparisons, compliance, scaling, self-hosting, and Appwrite guidance. The .optimize-cache.json has many new image entries for blog covers and contains unresolved Git merge conflict markers (<<<<<<<, =======, >>>>>>>) that must be resolved. No runtime code or public API signatures were modified.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'Add new blogs' is generic and vague—it lacks specificity about which blogs or what the primary change entails, making it difficult for teammates scanning history to understand the actual contribution. Revise the title to be more specific and descriptive, such as 'Add 25+ new blog posts on backend architecture, compliance, and platform comparisons' or similar, to clearly convey the scope and nature of the content being added.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch add-new-blogs-aditya
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@adityaoberai adityaoberai marked this pull request as ready for review March 18, 2026 19:02
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Mar 18, 2026

Greptile Summary

This PR adds 27 new blog posts covering backend development topics (authentication, databases, storage, compliance, tooling comparisons) along with their corresponding cover images. The posts are well-written and informative, but several code examples contain incorrect Appwrite SDK references that would mislead readers attempting to follow them.

Key issues found:

  • Incorrect SDK class TablesDB (critical): Three posts — appwrite-vs-vercel-vs-netlify, build-internal-tools-quickly, and client-dashboards-internal-tools — use a TablesDB class and listRows() method that do not exist in the Appwrite SDK. The correct class is Databases and the correct method is listDocuments(). This appears to be a hallucinated or renamed API that was never updated.
  • Missing imports for Permission and Role in easiest-file-uploads: The createBucket server-side code example uses these helpers without importing them from node-appwrite, which would result in a ReferenceError at runtime.
  • Missing unlisted: true in two posts: appwrite-vs-vercel-vs-netlify and cloudinary-vs-appwrite-storage are the only two of 27 posts without unlisted: true in their frontmatter — all others include it. If these are intended to go live immediately while others remain staged, that should be confirmed.
  • Content structure issue in open-source-baas-alternatives: The section introducing "the open-source BaaS landscape" promises a list of alternatives but immediately pivots to Appwrite, with the actual alternatives appearing later under a separate heading.

Confidence Score: 2/5

  • Not safe to merge as-is — multiple code examples contain non-existent SDK classes and methods that would mislead readers.
  • Three blog posts contain code using a fictitious TablesDB class and listRows() method that do not exist in the Appwrite SDK, and one tutorial post is missing required imports. Since these are tutorial/product blog posts meant to demonstrate Appwrite to developers, shipping broken code examples could actively harm developer trust and produce confusion. The issues are straightforward to fix but require attention before publishing.
  • appwrite-vs-vercel-vs-netlify, build-internal-tools-quickly, client-dashboards-internal-tools (incorrect SDK class), and easiest-file-uploads (missing imports) require fixes before merging.

Important Files Changed

Filename Overview
src/routes/blog/post/appwrite-vs-vercel-vs-netlify/+page.markdoc New blog post comparing Appwrite vs Vercel/Netlify. Contains two issues: a code snippet uses TablesDB (which doesn't exist in the Appwrite SDK) without importing it, and the frontmatter is missing unlisted: true unlike all 25 other posts in this PR.
src/routes/blog/post/build-internal-tools-quickly/+page.markdoc New tutorial blog post for building internal tools. Code examples import TablesDB from node-appwrite and call listRows() — neither of which exist in the SDK. The correct class is Databases and the correct method is listDocuments().
src/routes/blog/post/client-dashboards-internal-tools/+page.markdoc New blog post on building client dashboards. Code example imports TablesDB from appwrite and calls listRows() — both are non-existent. The correct class is Databases and the method is listDocuments().
src/routes/blog/post/easiest-file-uploads/+page.markdoc New tutorial blog post on file uploads with Appwrite. The createBucket server-side code example uses Permission and Role without importing them from node-appwrite, which would cause a runtime error.
src/routes/blog/post/cloudinary-vs-appwrite-storage/+page.markdoc New comparison blog post with no code snippets. Content and frontmatter are correct except for the missing unlisted: true field, which all other 25 posts in this PR include.
src/routes/blog/post/open-source-baas-alternatives/+page.markdoc New blog post on open-source BaaS alternatives. Has a content structure issue where the introductory paragraph promises a list of alternatives but immediately leads into the Appwrite section, with the actual alternatives appearing later under a different heading.
src/routes/blog/post/agency-backend-standardization/+page.markdoc New blog post on agency backend standardization. No code examples. Well-structured content with correct frontmatter including unlisted: true.
src/routes/blog/post/baa-explained/+page.markdoc New informational blog post on Business Associate Agreements for HIPAA. No code examples. Accurate, well-structured content with correct frontmatter.
src/routes/blog/post/appwrite-for-startups-ship-faster-without-backend-headaches/+page.markdoc New blog post targeting startups. No code examples. Content references correct Appwrite APIs and SDK methods. Frontmatter is complete.
src/routes/blog/post/firebase-vs-open-source-tradeoffs/+page.markdoc New comparison blog post on Firebase vs open-source backends. No code examples. Balanced, accurate content with correct frontmatter.

Comments Outside Diff (4)

  1. src/routes/blog/post/appwrite-vs-vercel-vs-netlify/+page.markdoc, line 267-276 (link)

    P2 TablesDB is not a real SDK class and is not imported

    The code snippet imports { Client, Account, Databases } from 'appwrite' but then instantiates const tablesDB = new TablesDB(client)TablesDB is never imported and does not exist in the Appwrite SDK. The correct class is Databases, and the correct method is listDocuments(), not listRows().

  2. src/routes/blog/post/build-internal-tools-quickly/+page.markdoc, line 355-385 (link)

    P2 TablesDB and listRows do not exist in the Appwrite SDK

    TablesDB is not a class exported by node-appwrite. The correct class is Databases. Similarly, listRows() is not a valid method — the correct method is listDocuments(). The tableId parameter should be collectionId.

  3. src/routes/blog/post/easiest-file-uploads/+page.markdoc, line 452 (link)

    P2 Permission and Role not imported from node-appwrite

    The createBucket code example uses Permission.read(), Permission.create(), Permission.update(), Permission.delete(), and Role.user(), but the import statement only includes Client and Storage. Running this code as-is would result in ReferenceError: Permission is not defined.

  4. src/routes/blog/post/open-source-baas-alternatives/+page.markdoc, line 446-448 (link)

    P2 Section header promises content that isn't there

    The # The open-source BaaS landscape section (line 446) introduces "Several serious open-source alternatives have emerged. Below are some of the most widely used open-source BaaS platforms:" and then immediately jumps to # Appwrite as a BaaS alternative — the promised list is missing at this point. The alternatives (Supabase, PocketBase, Directus) appear later under ## Other open-source options, but the reader reaches the Appwrite section first and may be confused by the unfulfilled introduction. Consider either reordering the sections so alternatives are listed before the Appwrite deep-dive, or revising the introductory sentence to not promise a list that appears much later.

Last reviewed commit: "Merge branch 'main' ..."

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 13

🧹 Nitpick comments (4)
src/routes/blog/post/baa-explained/+page.markdoc (1)

86-87: Remove repeated BAA-relationship sentence

The same “primary BAA relationship becomes the underlying cloud provider…” point is repeated almost verbatim in two places. Keep it once for tighter flow.

Also applies to: 92-93

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/routes/blog/post/baa-explained/`+page.markdoc around lines 86 - 87, Two
identical sentences repeat the same point; remove one occurrence of the sentence
"The primary BAA relationship becomes the underlying cloud provider where
Appwrite runs, not a separate backend vendor with its own sub-processors and
data handling policies." (it appears twice) so the page keeps the statement only
once for tighter flow, and adjust surrounding punctuation/spacing so the
paragraph reads smoothly after deleting the duplicate.
src/routes/blog/post/evaluate-backend-tools-no-lock-in/+page.markdoc (1)

109-117: Avoid absolute migration claims to reduce overpromise risk.

“Without any code changes” is very strong and may not hold for all deployments/integrations. Consider softening to “minimal or no application code changes,” depending on setup.

📝 Suggested wording adjustment
-- **Open source and self-hosting**: Appwrite is Apache 2.0 licensed and fully self-hostable. If Appwrite Cloud ceased to exist, you could operate the same software on your own infrastructure without any code changes.
+- **Open source and self-hosting**: Appwrite is Apache 2.0 licensed and fully self-hostable. If Appwrite Cloud ceased to exist, you could operate the same software on your own infrastructure with minimal or no application code changes.
...
-[Appwrite](https://appwrite.io) is designed to minimize these concerns: it's open source (Apache 2.0 licensed), fully self-hostable, uses standard REST APIs alongside native SDKs, stores data in portable formats, and offers a managed cloud service ([Appwrite Cloud](https://cloud.appwrite.io)) that can be migrated to self-hosted without code changes. It's a deliberate choice for teams that want a capable backend platform without accepting deep vendor lock-in.
+[Appwrite](https://appwrite.io) is designed to minimize these concerns: it's open source (Apache 2.0 licensed), fully self-hostable, uses standard REST APIs alongside native SDKs, stores data in portable formats, and offers a managed cloud service ([Appwrite Cloud](https://cloud.appwrite.io)) that can typically be migrated to self-hosted with minimal application code changes. It's a deliberate choice for teams that want a capable backend platform without accepting deep vendor lock-in.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/routes/blog/post/evaluate-backend-tools-no-lock-in/`+page.markdoc around
lines 109 - 117, Replace the absolute claim “without any code changes” with a
softened, qualified phrase to avoid overpromising—e.g., change the sentence in
the Appwrite description that currently reads “If Appwrite Cloud ceased to
exist, you could operate the same software on your own infrastructure without
any code changes.” to something like “you could typically operate the same
software on your own infrastructure with minimal or no application code changes,
depending on your deployment and integrations,” so the text now qualifies the
migration outcome and references the original quoted phrase for locating the
edit.
src/routes/blog/post/when-custom-backend-stops-being-worth-it/+page.markdoc (1)

18-67: Prefer ## for in-article section headings.

These sections are currently top-level # headings. If layout: post renders the page title as H1, demoting section headings to H2 keeps a clean semantic hierarchy.

Suggested heading-level adjustment
-# What "custom backend" actually costs
+## What "custom backend" actually costs

-# Signs that a custom backend is costing more than it's worth
+## Signs that a custom backend is costing more than it's worth

-# When custom backends are still the right choice
+## When custom backends are still the right choice

-# What the migration actually looks like
+## What the migration actually looks like

-# Appwrite as your managed backend
+## Appwrite as your managed backend

-# Migrate away from your custom backend before it becomes a blocker
+## Migrate away from your custom backend before it becomes a blocker
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/routes/blog/post/when-custom-backend-stops-being-worth-it/`+page.markdoc
around lines 18 - 67, The article uses top-level H1 headings (#) for in-article
sections such as "What \"custom backend\" actually costs", "Signs that a custom
backend is costing more than it's worth", "When custom backends are still the
right choice", "What the migration actually looks like", "Appwrite as your
managed backend", and "Migrate away from your custom backend before it becomes a
blocker"; because the page's layout likely renders the title as H1, change each
of these in-article headings from single '#' to '##' so they become H2s (keep
the exact text and formatting, only replace the leading '#' with '##') to
preserve semantic hierarchy and accessibility.
src/routes/blog/post/open-source-baas-alternatives/+page.markdoc (1)

26-44: Use consistent heading depth for the “Appwrite” section.

Promoting this heading to ## keeps hierarchy aligned with the surrounding sections and improves TOC structure.

✏️ Proposed tweak
-# Appwrite as a BaaS alternative
+## Appwrite as a BaaS alternative
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/routes/blog/post/open-source-baas-alternatives/`+page.markdoc around
lines 26 - 44, The "Appwrite as a BaaS alternative" heading is using a level-1
header; change its markdown heading to level-2 (i.e., promote "# Appwrite as a
BaaS alternative" to "## Appwrite as a BaaS alternative") so it matches the
surrounding "## Other open-source options" and "## Supabase" sections and keeps
the TOC and hierarchy consistent.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.optimize-cache.json:
- Around line 264-269: The .optimize-cache.json file contains leftover Git
conflict markers (<<<<<<<, =======, >>>>>>>) which breaks JSON parsing; open
.optimize-cache.json, remove the conflict markers and resolve to a single valid
entry for the conflicting key (choose the correct image key/value you intend to
keep), ensure commas and surrounding braces remain valid JSON, save the file,
then run the script that calls load_cache() (in scripts/optimize-assets.js) to
verify main() can parse the cache successfully.

In `@src/routes/blog/post/appwrite-vs-vercel-vs-netlify/`+page.markdoc:
- Around line 76-87: The example imports Databases but instantiates a
non-existent TablesDB, causing ReferenceError; replace the TablesDB
instantiation with the correct SDK class (use new Databases(client) instead of
new TablesDB(client)) and then call the appropriate Databases method (replace
tablesDB.listRows(...) with the Databases API call if needed) so the symbols
Client, Account, Databases, account.get, and the database list call match the
SDK.

In `@src/routes/blog/post/avoid-backend-overengineering/`+page.markdoc:
- Line 5: The frontmatter date is set to a future day ("date: 2026-03-19");
confirm whether the post should be scheduled or published now and, if immediate
publication is intended, change the "date" field in the +page.markdoc
frontmatter to today's date (e.g., "2026-03-18") or the desired publish
timestamp; if the future date is intentional for scheduling, add a short
comment/note in the file or PR explaining that the future date is deliberate so
reviewers know it’s not a mistake.

In `@src/routes/blog/post/baa-explained/`+page.markdoc:
- Around line 44-45: Replace the overly broad bullet "Breach notification
obligations and timelines: HIPAA requires notifying affected individuals within
60 days of discovering a breach" under the "Breach notification obligations"
heading with a narrower, accurate statement: indicate that breach notification
timing varies by role and law (e.g., generally “without unreasonable delay” for
business associates and specific 60‑day HITECH timelines for covered entities
where applicable), and keep the "Sub-contractor requirements" bullet about
downstream vendors signing BAAs; update the phrasing to avoid asserting a
universal 60‑day rule and instead reference role‑based and statute‑specific
timing.
- Around line 86-93: Summary: The text in the "Build your HIPAA-compliant
backend with full data control" section makes absolute claims ("data never
leaves your controlled environment" and "primary BAA relationship becomes the
underlying cloud provider") that ignore common third‑party services and
configuration choices. Fix: in +page.markdoc, update the paragraph and the
sentence containing "data never leaves your controlled environment" and the
repeated BAA claim to be conditional—add explicit assumptions and examples
(e.g., email/SMS providers, analytics/monitoring, backups, third‑party
integrations, support tooling) and state that self‑hosting reduces risk only
when those services are configured to keep PHI in‑scope; include a short
checklist or qualifier phrase like "assuming you do not use external processors
for X,Y,Z and have contractual BAAs in place" and remove absolute language so
the claims read as qualified benefits rather than guarantees.

In `@src/routes/blog/post/build-from-scratch-productivity/`+page.markdoc:
- Line 5: The post frontmatter currently sets date: 2026-03-19 which schedules
the article for tomorrow; confirm whether this future publish date is
intentional and if not, update the frontmatter "date" field in +page.markdoc to
either the intended publish date or today's date (2026-03-18) so blog
listing/order is correct, or explicitly note scheduling elsewhere if you want it
to remain future-dated.
- Around line 71-74: Replace the absolute claim "implemented correctly and
maintained by the Appwrite team, not yours." in the Authentication bullet with
softer, verifiable phrasing—e.g., "designed following best practices and
maintained by the Appwrite team"—and add a link to the relevant Appwrite docs or
security page; also scan nearby bullets for other absolute language (like "No S3
configuration" / "No custom API layer") and reword to less categorical if
present, e.g., "reduces the need for..." while adding documentation links for
verification.

In `@src/routes/blog/post/build-internal-tools-quickly/`+page.markdoc:
- Around line 104-117: The snippet uses the variable client when constructing
new Functions(client) and calling functions.createExecution, but client is not
initialized; add a Client initialization (e.g., create a new Client instance and
configure endpoint/project/API key) before the line const functions = new
Functions(client) so the Client is defined and authenticated for
functions.createExecution to work.

In `@src/routes/blog/post/easiest-file-uploads/`+page.markdoc:
- Around line 44-61: The sample is missing the Permission and Role symbols used
in the storage.createBucket call, causing a ReferenceError; update the import
that currently imports Client and Storage to also import Permission and Role
from 'node-appwrite' so Permission.read/create/update/delete and Role.user are
in scope for the bucket creation code (refer to the existing import line and the
storage.createBucket usage).

In `@src/routes/blog/post/evaluate-backend-tools-no-lock-in/`+page.markdoc:
- Line 71: Change the confusing heading text "The migration path from the
alternative" to "The migration path to an alternative" in the Markdoc page;
locate the heading line that currently reads "## 5. The migration path from the
alternative" and replace it with "## 5. The migration path to an alternative",
and if other content or internal links rely on the heading slug/anchor, update
those references accordingly to match the new heading text.

In `@src/routes/blog/post/save-weeks-managed-backends/`+page.markdoc:
- Around line 5-11: The post is dated 2026-03-19 but setting unlisted: true does
not prevent RSS exposure; update the metadata to avoid accidental early
publishing by either (A) removing or backdating the date field (the "date"
frontmatter) and only adding the March 19, 2026 date when you merge on/after
that date, or (B) keep this file out of the content tree until March 19, 2026;
do not rely on "unlisted: true" alone to keep it private (the "unlisted"
frontmatter only hides the index, not RSS).

In
`@src/routes/blog/post/self-hosting-with-appwrite-benefits-setup-and-best-practices/`+page.markdoc:
- Around line 64-65: Update the sentence that reads "Appwrite generates TLS
certificates automatically using your configured hostname" to qualify automatic
TLS issuance by listing required prerequisites: public domain with a valid TLD,
production mode (_APP_ENV=production), a configured
_APP_SYSTEM_SECURITY_EMAIL_ADDRESS, and internet-reachable ports 80 and 443;
also note that IP-only or internal-network setups cannot obtain Let's Encrypt
certs automatically and must use manual certificates or a proxy. Locate and
replace the line in the paragraph starting with "Enforce HTTPS." / the sentence
about Appwrite generating TLS certificates automatically and ensure the new text
clearly states these prerequisites and fallback options.
- Around line 104-106: Update the sentence "The APIs and SDKs are identical
between Cloud and self-hosted instances." to clarify parity is
version-dependent: explicitly state that parity holds when Cloud and self-hosted
versions match and note that Appwrite Cloud may receive features earlier (with
self-hosted updates typically following later), so API/SDK parity is not
unconditional. Keep the rest of the paragraph intact and use wording similar to
"APIs and SDKs are effectively identical when running the same Appwrite version;
however, Cloud can receive features earlier, so parity depends on matching
versions."

---

Nitpick comments:
In `@src/routes/blog/post/baa-explained/`+page.markdoc:
- Around line 86-87: Two identical sentences repeat the same point; remove one
occurrence of the sentence "The primary BAA relationship becomes the underlying
cloud provider where Appwrite runs, not a separate backend vendor with its own
sub-processors and data handling policies." (it appears twice) so the page keeps
the statement only once for tighter flow, and adjust surrounding
punctuation/spacing so the paragraph reads smoothly after deleting the
duplicate.

In `@src/routes/blog/post/evaluate-backend-tools-no-lock-in/`+page.markdoc:
- Around line 109-117: Replace the absolute claim “without any code changes”
with a softened, qualified phrase to avoid overpromising—e.g., change the
sentence in the Appwrite description that currently reads “If Appwrite Cloud
ceased to exist, you could operate the same software on your own infrastructure
without any code changes.” to something like “you could typically operate the
same software on your own infrastructure with minimal or no application code
changes, depending on your deployment and integrations,” so the text now
qualifies the migration outcome and references the original quoted phrase for
locating the edit.

In `@src/routes/blog/post/open-source-baas-alternatives/`+page.markdoc:
- Around line 26-44: The "Appwrite as a BaaS alternative" heading is using a
level-1 header; change its markdown heading to level-2 (i.e., promote "#
Appwrite as a BaaS alternative" to "## Appwrite as a BaaS alternative") so it
matches the surrounding "## Other open-source options" and "## Supabase"
sections and keeps the TOC and hierarchy consistent.

In `@src/routes/blog/post/when-custom-backend-stops-being-worth-it/`+page.markdoc:
- Around line 18-67: The article uses top-level H1 headings (#) for in-article
sections such as "What \"custom backend\" actually costs", "Signs that a custom
backend is costing more than it's worth", "When custom backends are still the
right choice", "What the migration actually looks like", "Appwrite as your
managed backend", and "Migrate away from your custom backend before it becomes a
blocker"; because the page's layout likely renders the title as H1, change each
of these in-article headings from single '#' to '##' so they become H2s (keep
the exact text and formatting, only replace the leading '#' with '##') to
preserve semantic hierarchy and accessibility.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 41f6ff7a-5191-4bb1-96c2-da50adfed8c2

📥 Commits

Reviewing files that changed from the base of the PR and between 03a0dd1 and 1a15984.

⛔ Files ignored due to path filters (26)
  • static/images/blog/agency-backend-standardization/cover.png is excluded by !**/*.png
  • static/images/blog/appwrite-for-startups-ship-faster-without-backend-headaches/cover.png is excluded by !**/*.png
  • static/images/blog/appwrite-vs-vercel-vs-netlify/cover.png is excluded by !**/*.png
  • static/images/blog/avoid-backend-overengineering/cover.png is excluded by !**/*.png
  • static/images/blog/baa-explained/cover.png is excluded by !**/*.png
  • static/images/blog/backend-platform-security-responsibilities/cover.png is excluded by !**/*.png
  • static/images/blog/backend-that-scales/cover.png is excluded by !**/*.png
  • static/images/blog/build-from-scratch-productivity/cover.png is excluded by !**/*.png
  • static/images/blog/build-internal-tools-quickly/cover.png is excluded by !**/*.png
  • static/images/blog/building-a-production-ready-backend-with-appwrite/cover.png is excluded by !**/*.png
  • static/images/blog/client-dashboards-internal-tools/cover.png is excluded by !**/*.png
  • static/images/blog/cloudinary-vs-appwrite-storage/cover.png is excluded by !**/*.png
  • static/images/blog/compliant-architectures/cover.png is excluded by !**/*.png
  • static/images/blog/developer-compliance-thinking/cover.png is excluded by !**/*.png
  • static/images/blog/easiest-file-uploads/cover.png is excluded by !**/*.png
  • static/images/blog/evaluate-backend-tools-no-lock-in/cover.png is excluded by !**/*.png
  • static/images/blog/firebase-vs-open-source-tradeoffs/cover.png is excluded by !**/*.png
  • static/images/blog/how-appwrite-simplifies-backend-development-for-frontend-devs/cover.png is excluded by !**/*.png
  • static/images/blog/indie-hackers-shipping-faster/cover.png is excluded by !**/*.png
  • static/images/blog/open-source-baas-alternatives/cover.png is excluded by !**/*.png
  • static/images/blog/open-source-backend-vs-managed-saas/cover.png is excluded by !**/*.png
  • static/images/blog/open-source-regulated-environments/cover.png is excluded by !**/*.png
  • static/images/blog/save-weeks-managed-backends/cover.png is excluded by !**/*.png
  • static/images/blog/secure-user-data-non-expert/cover.png is excluded by !**/*.png
  • static/images/blog/self-hosting-with-appwrite-benefits-setup-and-best-practices/cover.png is excluded by !**/*.png
  • static/images/blog/when-custom-backend-stops-being-worth-it/cover.png is excluded by !**/*.png
📒 Files selected for processing (27)
  • .optimize-cache.json
  • src/routes/blog/post/agency-backend-standardization/+page.markdoc
  • src/routes/blog/post/appwrite-for-startups-ship-faster-without-backend-headaches/+page.markdoc
  • src/routes/blog/post/appwrite-vs-vercel-vs-netlify/+page.markdoc
  • src/routes/blog/post/avoid-backend-overengineering/+page.markdoc
  • src/routes/blog/post/baa-explained/+page.markdoc
  • src/routes/blog/post/backend-platform-security-responsibilities/+page.markdoc
  • src/routes/blog/post/backend-that-scales/+page.markdoc
  • src/routes/blog/post/build-from-scratch-productivity/+page.markdoc
  • src/routes/blog/post/build-internal-tools-quickly/+page.markdoc
  • src/routes/blog/post/building-a-production-ready-backend-with-appwrite/+page.markdoc
  • src/routes/blog/post/client-dashboards-internal-tools/+page.markdoc
  • src/routes/blog/post/cloudinary-vs-appwrite-storage/+page.markdoc
  • src/routes/blog/post/compliant-architectures/+page.markdoc
  • src/routes/blog/post/developer-compliance-thinking/+page.markdoc
  • src/routes/blog/post/easiest-file-uploads/+page.markdoc
  • src/routes/blog/post/evaluate-backend-tools-no-lock-in/+page.markdoc
  • src/routes/blog/post/firebase-vs-open-source-tradeoffs/+page.markdoc
  • src/routes/blog/post/how-appwrite-simplifies-backend-development-for-frontend-devs/+page.markdoc
  • src/routes/blog/post/indie-hackers-shipping-faster/+page.markdoc
  • src/routes/blog/post/open-source-baas-alternatives/+page.markdoc
  • src/routes/blog/post/open-source-backend-vs-managed-saas/+page.markdoc
  • src/routes/blog/post/open-source-regulated-environments/+page.markdoc
  • src/routes/blog/post/save-weeks-managed-backends/+page.markdoc
  • src/routes/blog/post/secure-user-data-non-expert/+page.markdoc
  • src/routes/blog/post/self-hosting-with-appwrite-benefits-setup-and-best-practices/+page.markdoc
  • src/routes/blog/post/when-custom-backend-stops-being-worth-it/+page.markdoc

adityaoberai and others added 4 commits March 19, 2026 01:07
…-and-best-practices/+page.markdoc

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
…-and-best-practices/+page.markdoc

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
adityaoberai and others added 4 commits March 20, 2026 19:18
…s/+page.markdoc

Co-authored-by: Atharva Deosthale <atharva.deosthale17@gmail.com>
…kdoc

Co-authored-by: Atharva Deosthale <atharva.deosthale17@gmail.com>
…appwrite/+page.markdoc

Co-authored-by: Atharva Deosthale <atharva.deosthale17@gmail.com>
Co-authored-by: Aditya Oberai <adityaoberai1@gmail.com>
adityaoberai and others added 3 commits March 20, 2026 19:41
Co-authored-by: Atharva Deosthale <atharva.deosthale17@gmail.com>
Co-authored-by: Aditya Oberai <adityaoberai1@gmail.com>
Co-authored-by: Atharva Deosthale <atharva.deosthale17@gmail.com>
@adityaoberai adityaoberai merged commit 404ca84 into main Mar 20, 2026
6 checks passed
@adityaoberai adityaoberai deleted the add-new-blogs-aditya branch March 20, 2026 17:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants