The AI Game Development Workflow: From Idea to Finished Game

Follow a practical AI game development workflow from idea to playable prototype, art, testing, release and iteration. Includes templates, prompts and QA checklists.

Software developer workspace with laptop displaying code, reference notes and a creative work area

AI can help you generate code, plan levels, brainstorm mechanics, create placeholder art, and troubleshoot bugs. But going from an idea to a finished game still requires a development process. Without one, you can end up with an impressive opening screen, a dozen half-built features, and a game that is difficult to finish.

This guide explains an AI game development workflow you can repeat for different genres, especially HTML5, Phaser, and Three.js browser games. The goal is not to make AI do everything automatically. It is to give you a reliable way to direct AI tools, review their output, and build a game that people can actually play.

We’ll follow one fictional example throughout: Comet Courier, a compact 2D arcade game in which a space pilot delivers glowing parcels while avoiding drifting debris. This is a worked design example, not a claim that a downloadable Comet Courier game already exists. You can adapt the workflow to a puzzle game, racing game, platformer, 3D adventure, or another concept.

By the end, you’ll have: a short game brief, a one-page design document, a technical plan, a working-prototype checklist, an art and audio plan, a playtesting method, and a release checklist. If you want to try a smaller coding example first, follow our beginner browser game tutorial before returning to this workflow.

The complete AI game development workflow at a glance

Think of development as a sequence of questions you must answer rather than a single huge prompt. Each phase produces a visible deliverable and ends with a decision about whether the project is ready to move on.

Phase Main deliverable Ready when…
1. Define Player promise and scope You can explain the game in one sentence.
2. Design One-page game design document Rules, controls, and win/loss conditions are clear.
3. Plan Technical choices and milestone list The first playable milestone is achievable.
4. Prototype Graybox playable build The core loop works with temporary visuals.
5. Produce Art, audio, progression, and UI Assets are integrated consistently, not just generated.
6. Test Bug log and verified fixes Critical scenarios pass repeatedly.
7. Release Packaged and tested build Players can launch, understand, and restart the game.
8. Improve Feedback-driven update plan Changes are based on evidence from actual play.

These steps are not always linear. You may return from testing to redesign a mechanic, or discover that your chosen engine cannot easily support a feature. That is normal. The important thing is to preserve a working build while you learn.

1. Define the player promise before you touch code

Describe what the player does, why it feels satisfying, and what makes this particular version different. A usable starting sentence is: “The player [does an action] to [achieve a goal] while [facing a challenge], with [one distinctive twist].”

For Comet Courier: “Pilot a small delivery ship between moving asteroids, collect parcels, and complete as many deliveries as possible before the round ends; each successful delivery briefly changes the asteroid patterns.” That statement gives us movement, pickups, obstacles, a timer, and a twist we can evaluate later.

Decide the scope of version 0.1

For a first playable build, commit to one environment, one controllable character, one objective, one failure condition, and a way to restart. Leave online multiplayer, procedural worlds, 40 levels, skill trees, and cinematic cutscenes for later unless the game’s identity absolutely requires them.

Write two lists: must-have for the first playable milestone and possible later additions. Treat the second list as a parking lot, not a promise. For our example, ship steering, collisions, deliveries, scoring, and restart are must-haves. Upgrade shops, story scenes, cosmetics, and multiplayer are not.

This is also the moment to identify your target platform. Desktop keyboard controls, phone touch inputs, gamepad support, and low-powered laptops create different design obligations. The word “browser game” alone does not settle them. For Comet Courier, choose desktop keyboard play initially, with mobile suitability assessed after the loop is fun.

Use AI for options, not final decisions

Discovery prompt: “Act as a critical indie game designer. I want to make a small desktop browser game about space deliveries. Propose three distinct 60–90 second gameplay loops. For each, describe the player action, the source of challenge, the reason to replay, and the highest implementation risk. Avoid online multiplayer, external accounts, and features that need a server. Recommend the simplest loop to prototype, and explain why.”

Pick one direction. Save the decision in your project notes. Don’t keep asking for new concepts after the team (even a team of one) has committed to testing the current one.

2. Turn the idea into a one-page game design document

A game design document (GDD) makes your rules explicit. It does not need to be 50 pages long. For a small arcade project, one page is often enough to expose missing decisions before the AI starts writing code.

Copy this practical game design template

Working title:
Target player and platform:
One-sentence player promise:
Core loop (repeatable actions):
Controls and camera:
Player goal:
Win and loss conditions:
Scoring / resources:
Obstacles and difficulty:
Visual direction and readability:
Audio and feedback:
Accessibility requirements:
What is deliberately out of scope:
Definition of playable version 0.1:

Here’s how part of this document looks for Comet Courier. Core loop: navigate toward a parcel, pick it up, steer around hazards, deliver it to a marked station, receive points, and repeat. Controls: WASD or arrow keys; constant top-down camera. Failure: three collisions end the run, or the timer reaches zero. Success: the first playable milestone is successful if you can complete at least one delivery, take damage, see the timer and score change, and restart.

Notice what is still undecided: the precise ship speed, hazard frequency, scoring balance, and whether the asteroid-pattern twist is understandable. Leave these as explicit tuning variables. Inventing precise numbers without testing them can make a design look complete when it is not.

Specify behaviors, not just features

“Add collisions” is ambiguous. “When the ship overlaps a hazardous asteroid, remove one health point, trigger a short hit effect, and prevent additional damage for a brief recovery interval” describes behavior the AI can implement and you can test. Apply the same approach to controls, menus, scoring, pause, restart, and victory conditions.

Ask the AI to review the document as a skeptical producer: “Identify contradictions, rules with no testable outcome, and features that make this prototype unnecessarily large. Suggest the smallest corrections without changing the game’s identity.” Review the suggestions, then freeze the first milestone’s rules.

3. Select a toolchain that matches the game

There is no universal best AI game engine. Choose based on the output you need and how easily you can test, package, and maintain it.

Tool Good fit Considerations
HTML5 Canvas + JavaScript Small self-contained 2D prototypes Easy to inspect, but you implement many game systems yourself.
Phaser 2D arcade, platform, puzzle, and casual browser games Built-in scenes and common game systems; learn its asset and lifecycle conventions.
Three.js Custom 3D browser rendering and scenes Provides a 3D foundation; substantial game rules and physics may need additional systems.
Godot Editor-driven 2D or 3D projects and broader platform targets Web exports, assets, and plugin compatibility require early validation.

For a first version of Comet Courier, Phaser is a reasonable choice because the game is 2D, needs a manageable scene, and uses straightforward collisions and animation. A single-file Canvas prototype is also a valid learning option. Three.js would make more sense if the player experience depended on 3D navigation and rendering rather than a simple top-down view.

Read the official Phaser first-game guide and the Three.js scene guide before selecting a framework. These primary sources help you tell genuine engine features from AI-generated assumptions.

Choose the development environment early: a code editor, a version-control repository or versioned backups, a browser with developer tools, and a local server when required by your imports and assets. Some single-file Canvas examples can open directly; module-based projects often require an HTTP development server because browsers apply restrictions to local files. The Three.js installation documentation outlines common setups.

What about AI coding subscriptions?

AI assistance is a development aid, not a runtime requirement. A game hosted on Blinkcade should not need a player’s access to your coding assistant. Keep private credentials out of browser code. If a feature requires a secret API key, do not paste that key into JavaScript delivered to players; design a properly secured server component or choose a feature that does not require secrets.

4. Break the technical plan into milestones

AI can produce large files quickly. That doesn’t mean a large file is the best first deliverable. Divide the work into checkpoints that can be reviewed in minutes rather than a single feature list that takes weeks to verify.

For a basic browser game, a useful order is: project loads → player moves → world rules work → one complete round → polish → test → package. Each milestone should produce a running build and include a short definition of done.

A simple technical design document (TDD)

Your TDD can be as lean as your GDD. Capture the following decisions before the first major build:

Platform: desktop browser
Renderer / framework: Phaser or Canvas
Development server: local HTTP server if needed
Resolution and scaling plan: explicit
Input: keyboard; later add touch/gamepad if scoped
Game states: title, playing, paused, result
Player systems: movement, health, delivery
World systems: spawn, collisions, timer
Data: score, configuration, settings
Assets: image and audio directories
Performance target: measured on target hardware
Persistence: none in version 0.1
Build and release: tested static files

If you use multiple JavaScript files, keep responsibilities understandable. For example: main.js starts the application; scenes/PlayScene.js handles the active level; config.js stores tuning constants; ui.js displays state; and assets/ holds artwork. The exact file organization depends on the framework. What matters is knowing where a bug belongs and avoiding duplicated logic.

Give AI small, verifiable assignments

Implementation prompt: “We have approved the attached GDD and TDD for Comet Courier. Implement milestone 1 only: load a working game scene, draw a placeholder ship, move it with WASD and arrow keys, keep it inside the viewport, and display a visible title and Restart button. Use the existing framework and folder structure. Don’t add collision hazards or audio yet. Explain each changed file and provide exact browser tests.”

Before requesting milestone 2, run milestone 1. If it fails, fix it first. Preserve a known-good snapshot and record the change. This discipline prevents the common problem in which an AI rewrites a large unrelated component to repair one small visual issue.

5. Build a graybox prototype before polished art

A graybox is a playable prototype with simple shapes, colors, and temporary assets. You build it to answer questions about the game, not to win an art contest.

For Comet Courier, draw the ship as a triangle, parcels as yellow squares, deliveries as cyan rings, and hazards as clearly marked circles. Give the player one objective in view and enough space to steer. Add a start state, the playable state, a visible score, a collision consequence, and a result state. Now you can ask meaningful questions: Can I understand where to deliver? Is turning responsive? Are collisions fair? Does the end-of-round screen explain what happened?

Pass the graybox gate only when: a new player can start, move, complete a delivery, experience failure, and restart without assistance. A full menu system, polished soundtrack, and progression map are not necessary to answer those questions.

Make the update loop predictable

Browser rendering often uses requestAnimationFrame(), and game frameworks provide their own loop abstractions. Movement should depend on elapsed time rather than the number of frames drawn; otherwise the game can behave differently on high-refresh-rate devices. MDN documents the timing behavior in its requestAnimationFrame reference.

Manage object lifecycle deliberately. A collision should not subtract health on every frame the objects overlap; a restart should not create a duplicate update loop; a level transition should not leave old listeners active. These bugs are easy to miss when AI-generated code is judged only by appearance.

A useful milestone check: Play three consecutive rounds, including one early failure and one completed objective. If controls, timer, score, and restart remain correct across all three, save the baseline before adding more systems.

6. Produce graphics and sound as one coherent system

Now that the core loop works, define the art direction. Instead of asking AI to “make AAA graphics,” write a usable art brief: perspective, silhouette, palette, lighting, asset dimensions, camera framing, animation states, and the visual hierarchy between player, goals, and danger.

For Comet Courier, choose a clean illustrated science-fiction look: dark indigo space, warm amber parcels, cool cyan delivery rings, white ship silhouettes, and red hazard signals. This palette communicates gameplay information. A beautiful background becomes a problem if it makes incoming hazards difficult to see.

Build an asset list and naming convention

Asset Required states Quality check
Player ship Idle, thrust, hit Readably faces the direction of motion
Parcel Floating, collected Distinct from hazards
Asteroid Approach, impact Collision silhouette matches gameplay
Delivery station Available, active, completed Objective remains visible
UI elements Normal, hover/focus, disabled Text legible at intended size
Sound effects Pickup, damage, deliver, result Each cue has a clear gameplay purpose

Track these with an asset spreadsheet or a simple checklist: filename, purpose, owner/source, version, dimensions, licence, implementation status, and test status. Names such as ship_idle_v02.png or delivery_success_v01.wav are easier to maintain than final-final-new.png.

Prototype a reusable AI art prompt

Art prompt: “Create a game-ready sprite concept for the Comet Courier player ship. Top-down 2D view, clean silhouette, no perspective tilt, soft sci-fi illustration, dark indigo and cyan accents, transparent background, centered and fully visible, consistent proportions. Show idle and thrust states with the same hull geometry. No labels, text, watermark, or interface elements.”

Even when an AI image tool generates attractive assets, their consistency and animation readiness must be checked in the actual game. For animated sprites, confirm that frames align at a common pivot point and share dimensions. For 3D models, verify scale, orientation, topology, animation rig, materials, and web export size rather than assuming the asset is engine-ready.

With audio, test on real browsers. Start playback only after user interaction where necessary, add volume and mute controls, and avoid overlapping effects that become painfully loud. Include credits and usage rights where applicable. Generated art and sound are production inputs requiring review, not a substitute for the art pipeline.

7. Add game feel, onboarding, and progression carefully

Once art is integrated, focus on how the game responds to the player. Game feel includes acceleration, stopping distance, collision feedback, camera movement, particle timing, sound timing, UI feedback, and how quickly the next action can begin. Small refinements often matter more than another large system.

In Comet Courier, pickup feedback might combine a brief glow, a satisfying audio cue, and an updated objective marker. A collision might trigger a short flash and temporary damage protection. If the player is confused about what happened, add clarity before spectacle. If flashes or camera shake are used, offer a way to reduce or disable potentially uncomfortable effects.

Teach through the first few seconds of play. Show the primary action with a concise on-screen prompt, place an easy first objective near the player, and introduce danger after the player understands movement. A tutorial that forces the user through a wall of text before trying the controls can be less useful than a safe first interaction.

For longer games, design progression as a learning curve: new situations, combinations of familiar rules, and occasional changes in pace. For short replayable games, offer clear end-of-run feedback, a reason to improve, and a fast restart. Avoid adding coins, unlocks, daily rewards, or achievements unless they reinforce the core experience.

Prompt AI for constrained polish

Polish prompt: “The graybox Comet Courier game passes movement, collisions, delivery, scoring, pause, and restart tests. Improve the sense of impact on successful delivery with a short animation and sound cue. Keep all existing rules and controls unchanged. Support reduced-motion preferences. Do not add dependencies. List the exact changed files and five regression tests.”

Keep the last passing build close at hand. If the new feedback makes the player harder to control or lowers performance, roll back the change and improve it in isolation.

8. Test gameplay systematically, not just by playing once

A convincing game screenshot tells you almost nothing about reliability. Test the states and transitions that players will use repeatedly. Keep a small test checklist from the beginning and rerun it after code changes.

Test Expected result Why it matters
Fresh load Menus and assets appear; game can start Detects missing files and initialization errors
Controls Inputs move in the correct direction, then stop Finds inverted axes and stuck keys
Boundaries Ship stays within playable limits Prevents escape from the game world
Delivery One parcel delivers once, score updates once Catches repeated collision rewards
Damage One hit removes only the intended health amount Catches collision spam
Pause and focus Background-tab behavior is intentional Protects game timing and user experience
Game over Run stops, result is accurate, replay is offered Makes failure understandable
Repeated restart Several restarts do not accelerate the game Finds duplicate timers, listeners, and loops
Screen size UI and camera work at target viewport sizes Finds clipping and unreadable interface text
Real deployment All assets load from the hosted build Finds path and browser security assumptions

Each time a test fails, record the exact setup, steps to reproduce, expected outcome, observed outcome, and console output. Fix the smallest system that explains the failure. Do not accept “probably fixed” from an AI assistant as evidence that the bug is gone.

A useful bug-fixing prompt

Debugging prompt: “After restarting Comet Courier five times, asteroids move too quickly. This does not happen after a fresh page load. Expected: speed stays controlled by the same difficulty value on each run. Review game-loop registration, event listeners, and timers. Explain the root cause, propose the minimal patch, preserve all existing controls and scoring, and give me exact regression steps.”

For a public game, test at least one target desktop browser, a second major browser engine, the intended input device, and one slower or less capable machine if available. The goal is not to claim universal compatibility; it is to know what you’ve actually verified and what remains untested.

9. Measure performance and accessibility before release

“Runs at 60 FPS” is not meaningful without knowing the hardware, resolution, scene complexity, and test conditions. Record actual frame-time behavior on the devices you care about. Look for long stalls, spikes when new enemies spawn, delayed input, texture loading problems, and memory usage that climbs after repeated restarts.

Performance improvements for a browser game often start with reducing unnecessary object creation, disposing of unused resources, reusing expensive assets, limiting excessive particles, and using appropriate texture dimensions. For 3D projects, watch draw calls, shader complexity, shadows, postprocessing, and imported model size. Make one optimization at a time and measure again.

MDN’s animation performance guidance explains why visually rich effects can cause stutter even when the code seems simple.

Accessibility is part of usability. Provide readable contrast, a visible keyboard focus for controls outside the canvas, understandable instructions, adjustable audio, and a way to pause or restart. Do not convey critical meaning through color alone. If the game uses flashing lights or intense camera shake, provide reduced-effects options. A Canvas-heavy game can require additional design work to support assistive technology; labeling a canvas alone does not make all gameplay accessible.

Also confirm the game still works when a tab loses focus and returns. Browsers may throttle animation in background tabs. Time-based logic and pause policies must account for that deliberately, rather than letting the player return to a surprise failure.

10. Package the finished build and launch thoughtfully

Before calling the project “finished,” decide what finished means for the agreed launch scope. A successful small release may be one polished arcade experience, not a huge game with dozens of promised levels. The shipped build should deliver its player promise, look coherent, recover from normal errors, and make replay straightforward.

Pre-release checklist

  • Game: start, pause, win, lose, restart, scoring, and controls all pass testing.
  • Build: the production bundle loads without broken imports or missing images/audio; no development-only paths remain.
  • Device: layout, keyboard, pointer, gamepad, and touch work wherever those inputs are advertised.
  • Visuals: screenshots match actual gameplay; the cover image does not promise graphics absent from the build.
  • Audio: start restrictions, volume, mute, and licensing have been reviewed.
  • Performance: run duration and target hardware have been tested, with known limitations documented.
  • Safety: no secret API keys or private credentials are exposed in client-side scripts.
  • Legal: asset rights and required attributions are recorded; privacy claims match actual data collection.
  • Publishing: title, description, controls, genre, language, support information, and screenshots are accurate.
  • Rollback: a known-good version and a way to restore it exist.

If your game consists of one HTML file, test that actual file in the intended hosting environment. For a larger project, build the production output and test the generated directory, not only the development server. Relative asset paths, compression, case-sensitive filenames, embedded frames, and browser policies may behave differently after deployment.

What does WordPress do here?

WordPress can host a game landing page, description, screenshots, related tutorials, and account features where configured. That doesn’t mean every script should be pasted directly into the WordPress content editor. A common setup is to serve the HTML5 game build separately and embed or link to it from the game page, subject to your host’s security configuration. Test the deployed result rather than assuming an upload ZIP or a shortcode automatically executes the game.

For a distribution page, include a clear call to play, the controls, genre, screenshots from real gameplay, and honest platform requirements. The player should not have to read the development diary before finding the Play button.

11. Learn from real players and plan updates

After release, the workflow continues. Watch for repeating friction: players who cannot identify the objective, pause menu confusion, performance problems, unexpected difficulty spikes, and exits immediately after loading. An analytics event is useful only if it helps answer a legitimate product question. Use privacy-conscious data collection, provide appropriate notices, and avoid collecting more than you need.

Use a short playtest script with one or two questions about clarity, rather than asking “Do you like the game?” Try: “What was your first goal?” “When did you feel in control?” “What caused your last failure?” “Would you retry? Why?” Observe first; explain only after the player has tried it.

Prioritize changes in this order: crashes and blockers; controls and clarity; fairness and pacing; content variety; cosmetics. Publishing ten new upgrades is less valuable than repairing a movement bug that makes the first thirty seconds frustrating.

Write a short release note

Version: 0.1.1
Why we updated: New players missed the delivery marker.
Changed: Clearer marker and short introductory prompt.
Unchanged: Controls, ship speed, scoring, game duration.
Tests: Start, deliver, damage, game over, restart.
Next: Verify whether players understand the first objective.

Every release should describe a real change that can be checked. Avoid claiming improvements based on an AI suggestion alone; compare actual before-and-after behavior. A single well-tested change can be more valuable than ten speculative additions.

12. A practical ten-session development plan

Use the following as a sample sequence, not a guarantee of how many hours the game will take. Time varies enormously with experience, scope, dependencies, art demands, and debugging surprises.

  1. Session 1 — Idea: Write three player promises, choose one, and define the first playable milestone.
  2. Session 2 — GDD: Fill out the one-page design and identify contradictions.
  3. Session 3 — TDD: Select the framework, input plan, resolution, assets, and milestone sequence.
  4. Session 4 — Movement: Launch a scene with a controllable player and reliable restart.
  5. Session 5 — Core loop: Add pickups, obstacles, scoring, and clear failure conditions.
  6. Session 6 — Test: Run the graybox checklist and fix blocking issues before polishing.
  7. Session 7 — Art: Create an asset brief, integrate consistent visuals, and confirm silhouettes.
  8. Session 8 — Game feel: Add sound and feedback without changing the validated rules.
  9. Session 9 — QA: Recheck multiple rounds, target devices, performance, and deployment paths.
  10. Session 10 — Release: Publish the build and a truthful game page; record next-step feedback questions.

If the game is not playable by session six, stop expanding scope. Ask whether a core rule is ambiguous, the architecture is needlessly complicated, or too many systems were being developed at once. Rebuild the smallest vertical slice you can verify and restore momentum from there.

Common mistakes that derail AI-assisted game projects

Trying to build everything in the first prompt

The larger the initial request, the harder it becomes to identify which requirement is broken. Instead, ask for a narrow milestone, test it, and then extend the last verified build. A project that can reliably start, play, fail, and restart is a much stronger base than a prototype with ten unfinished systems.

Confusing concept artwork with finished game graphics

A concept image proves that the aesthetic is appealing, not that your renderer, camera, UI, animation, or sprites are functioning. Require in-game screenshots at the actual target resolution and compare the render against your art brief. When necessary, simplify effects to preserve readability and performance.

Letting AI silently change the design

AI tools may introduce new controls, rules, dependencies, or asset conventions while trying to help. Before accepting a change, ask which parts of the approved GDD and TDD it affects. Keep major decisions documented, and require explicit acceptance tests for intentional changes.

Publishing straight from the development environment

A game running locally does not prove that its deployed assets, paths, permissions, or embedded player will work. Test the actual hosted build, including the game page, controls, audio, restart behavior, and download or load times.

Frequently asked questions

Can I make a complete game entirely with AI?

AI can assist across planning, coding, art iteration, documentation, and testing, but someone still needs to decide what the game should be, run builds, verify output, handle rights and security, and make release decisions. The process described here treats AI as a collaborator rather than an automatic guarantee of quality.

What’s the difference between a game design document and a technical design document?

The GDD describes the player experience, rules, goals, mechanics, and presentation. The TDD describes how you plan to implement those rules: framework, systems, scene structure, assets, input, storage, and testing. Both can be small for a first project, but they solve different problems.

Do I need Phaser, Three.js, or Godot?

No. Plain HTML5 Canvas and JavaScript can be enough for a small browser prototype. Use Phaser when its 2D game systems save work, Three.js when you need browser-based 3D rendering, or Godot when an editor-led workflow and its supported export targets fit your needs.

How do I keep AI from breaking working code?

Maintain versioned backups or source control, give one narrowly defined task at a time, request the smallest relevant change, and rerun your acceptance tests. Do not add three new systems before confirming the previous one works.

When is an AI-built game ready to publish?

When it fulfills its defined player promise, passes agreed functional and device tests, loads correctly from the real hosting environment, and has accurate game descriptions, controls, credits, and rights. Being free of every possible defect is not realistic; being transparent about known limitations is.

Your next step: turn this workflow into one playable milestone

Choose a small idea. Fill out the one-page GDD. Decide on a practical toolchain. Prompt for only the first playable milestone. Start the game, test it, and save the working result. Repeat until your game is coherent enough to publish.

For a hands-on example, follow How to Make a Browser Game With AI. For a broader look at AI tools, graphics, and production decisions, read our cornerstone Vibe Coding Games guide, or explore the Blinkcade Academy library for more tutorials.

Keep learning

The complete guide Vibe Coding Games: The Complete Guide to Building Games With AI
  1. Game Design Beginner 16 min read

    How to Write a Game Design Document With AI (+ Free GDD Template)

    Write a game design document with AI using a free GDD template, a filled-in game example, copyable prompts and practical checklists for development.

  2. Three.js & 3D Games Intermediate 15 min read

    Build a Match-3 Browser Game With Three.js and AI (Complete Tutorial + Source Code)

    Build a Three.js match-3 browser game with AI: 3D runes, an 8×8 board, legal swaps, gravity, cascades, scoring, raycasting, tests and downloadable source code.

  3. AI Tools & Prompts Beginner 21 min read

    Best AI Prompts for Game Mechanics, Movement and Controls (Copy-and-Paste Guide)

    Use practical AI prompts to design and debug player movement, jumping, collisions, combat, camera controls, mobile input and game feel in HTML5, Phaser and Three.js games.

All Academy tutorials

1 comment

Comments are closed.