Tutorials

Backend for AI: Add Secure Backend to AI-Generated Code

AI has become remarkably good at writing code. You can ask ChatGPT, Claude, or any modern AI to build you an app, and within seconds you'll have working HTML, CSS, and JavaScript. But there's a critical gap: the backend problem.

When AI generates a typical web application, you get code that looks complete but is actually missing crucial pieces:

  1. No Backend Infrastructure: The AI might write fetch('/api/data') but there's no actual API endpoint
  2. No Database: Code that saves user data has nowhere to actually store it
  3. No Authentication: User login code exists but doesn't connect to any auth system
  4. Security Vulnerabilities: API keys hardcoded in frontend code, exposed credentials, no data validation

This leaves developers with hours of manual work: setting up servers, configuring databases, managing API keys, implementing security, and dealing with deployment. Even experienced developers struggle with this, and for beginners, it's often an insurmountable barrier.

The Solution: Just Add "use puter.js" to your prompt!

Puter.js completely changes this equation. By simply adding Important: use puter.js to the end of your AI prompt, you get a fully functional application with:

  • i-check Automatic Backend: Cloud storage, databases, and APIs work immediately
  • i-check Built-in Authentication: User accounts and sessions handled automatically
  • i-check Enterprise Security: No API keys in code, automatic data isolation
  • i-check Zero Configuration: Everything works with a single script tag

Let's see this in action.

Example 1AI Building a Todo App (Without Puter.js)

First, let's see what happens when you ask AI to build a todo app normally:

Prompt to AI:

Build a todo app with user accounts where each user has their own todo list

AI typically generates:

<!DOCTYPE html>
<html>
<head>
    <title>Todo App</title>
</head>
<body>
    <div id="app">
        <h1>Todo List</h1>
        <input type="text" id="todoInput" placeholder="Add a todo">
        <button onclick="addTodo()">Add</button>
        <ul id="todoList"></ul>
    </div>

    <script>
        // This looks like it works, but...
        let todos = [];  // Only stored in memory, lost on refresh!
        
        function addTodo() {
            const input = document.getElementById('todoInput');
            
            // This fetch won't work - there's no backend!
            fetch('/api/todos', {
                method: 'POST',
                body: JSON.stringify({ text: input.value })
            });
            
            todos.push(input.value);
            renderTodos();
        }
        
        function renderTodos() {
            // Updates the UI but data isn't persisted anywhere
            const list = document.getElementById('todoList');
            list.innerHTML = todos.map(t => `<li>${t}</li>`).join('');
        }
        
        // This also won't work - no actual API
        fetch('/api/todos')
            .then(res => res.json())
            .then(data => {
                todos = data;
                renderTodos();
            });
    </script>
</body>
</html>

Problems with this code:

  • d-remove No actual backend API endpoints
  • d-remove Data lost on page refresh
  • d-remove No user authentication
  • d-remove No database connection
  • d-remove Won't work when deployed

Example 2The Same App With Puter.js

Now, let's see what happens when you add "use puter.js" to your prompt:

Prompt to AI:

Build a todo app with user accounts where each user has their own todo list.
Important: use puter.js

AI generates (with Puter.js):

<!DOCTYPE html>
<html>
<head>
    <title>Todo App with Puter.js</title>
    <script src="https://js.puter.com/v2/"></script>
</head>
<body>
    <div id="app">
        <h1>My Todo List</h1>
        <div id="authStatus"></div>
        <input type="text" id="todoInput" placeholder="Add a todo">
        <button onclick="addTodo()">Add</button>
        <ul id="todoList"></ul>
    </div>

    <script>
        // This ACTUALLY WORKS immediately!
        
        async function init() {
            // Check if user is signed in
            if (!puter.auth.isSignedIn()) {
                await puter.auth.signIn();
            }
            
            const user = await puter.auth.getUser();
            document.getElementById('authStatus').textContent = 
                `Signed in as: ${user.username}`;
            
            loadTodos();
        }
        
        async function loadTodos() {
            // Actually retrieves todos from the cloud!
            const todos = await puter.kv.get('todos') || [];
            renderTodos(todos);
        }
        
        async function addTodo() {
            const input = document.getElementById('todoInput');
            const todos = await puter.kv.get('todos') || [];
            
            todos.push({
                id: Date.now(),
                text: input.value,
                completed: false
            });
            
            // Actually saves to persistent cloud storage!
            await puter.kv.set('todos', todos);
            
            input.value = '';
            renderTodos(todos);
        }
        
        function renderTodos(todos) {
            const list = document.getElementById('todoList');
            list.innerHTML = todos.map(t => `
                <li>
                    <input type="checkbox" ${t.completed ? 'checked' : ''} 
                           onchange="toggleTodo(${t.id})">
                    ${t.text}
                </li>
            `).join('');
        }
        
        async function toggleTodo(id) {
            const todos = await puter.kv.get('todos') || [];
            const todo = todos.find(t => t.id === id);
            todo.completed = !todo.completed;
            await puter.kv.set('todos', todos);
            renderTodos(todos);
        }
        
        init();
    </script>
</body>
</html>

What you get with Puter.js:

  • i-check Working Authentication: Users can sign in immediately
  • i-check Persistent Storage: Todos are saved in the cloud automatically
  • i-check User Isolation: Each user only sees their own todos
  • i-check Instant Deployment: Works immediately, no server setup
  • i-check Zero Configuration: Just one script tag

Example 3AI Building More Complex Apps

The power becomes even more apparent with complex applications. Here's what happens when you ask for something more sophisticated:

Prompt to AI:

Build a document editor with:
- Rich text editing
- Auto-save to cloud
- File management
- Share documents with other users
- AI-powered writing suggestions

Important: use puter.js

The AI will generate a fully functional app that:

  • Saves documents to cloud storage (puter.fs)
  • Manages files and folders
  • Implements sharing through Puter's permission system
  • Integrates AI writing assistance (puter.ai.chat)
  • All with zero backend configuration!

Example 4Security Comparison

Let's look at how Puter.js solves security issues that plague AI-generated code:

d-remove Typical AI-generated code (INSECURE):

// AI often generates this - NEVER do this!
const API_KEY = 'sk-abc123...';  // Exposed to everyone!

fetch('https://api.openai.com/v1/chat/completions', {
    headers: {
        'Authorization': `Bearer ${API_KEY}`  // Security nightmare!
    },
    body: JSON.stringify({ prompt: userInput })
});

i-check With Puter.js (SECURE):

// No API keys needed - completely secure!
const response = await puter.ai.chat(userInput);
// User authenticates with their own Puter account
// API access is handled securely server-side

How It Works

When AI generates code with Puter.js:

  1. Authentication: Users sign in with their Puter account (handled automatically)
  2. Resource Isolation: Each user's data is completely isolated
  3. API Access: All API calls go through Puter's secure infrastructure
  4. No Keys Required: Developers never handle API keys or credentials
  5. Instant Deployment: Code runs immediately in any browser

Best Practices for AI Prompts

To get the best results when using AI with Puter.js:

Good Prompt Structure:

Build a [type of app] that:
- [Feature 1]
- [Feature 2]
- [Feature 3]

Important: use puter.js for all backend functionality including storage, database, authentication, and AI features

Why This Matters

The combination of AI code generation and Puter.js represents a fundamental shift in web development:

  • Beginners can build real, functional apps without learning backend development
  • Experienced developers can prototype 10x faster
  • Security is handled automatically, preventing common vulnerabilities
  • Deployment is instant - no DevOps required
  • Costs are eliminated - users pay for their own usage

Try It Yourself

Next time you use AI to generate code, just add "Important: use puter.js" to your prompt. You'll get a fully functional application with:

  • Working backend
  • User authentication
  • Cloud storage
  • Database functionality
  • AI capabilities
  • Instant deployment

No server setup. No API keys. No configuration. Just working code.

Related

Free, Serverless AI and Cloud

Start creating powerful web applications with Puter.js in seconds!

Get Started Now

Read the Docs Try the Playground