diff --git a/.gitignore b/.gitignore index 73aa821..b6c1da1 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ Thumbs.db # Temporary files *.tmp + diff --git a/index.html b/index.html index 5bdae99..d8ff487 100644 --- a/index.html +++ b/index.html @@ -5,85 +5,30 @@ ArtyLLaMa - AI-Powered Artifacts for Everyone @@ -273,77 +220,79 @@
-
-

- ArtyLLaMa creates +

+ ArtyLLaMa creates

-

Open-source large language models for interactive AI chatbot experiences

+

Open-source large language models for interactive AI chatbot experiences

Get Started
-
+
ArtyLLaMa Interface
-
-
-
-
🤖
-

Multiple AI Providers

-

Integrate with Ollama, OpenAI, and Anthropic for versatile AI experiences

-
-
-
💬
-

Real-time Chat Interface

-

Dynamic UI with real-time message updates and interactive conversations

-
-
-
🖥️
-

Code Highlighting

-

Syntax highlighting for various programming languages

-
-
-
🎨
-

HTML Preview

-

Interactive canvas and script support for immediate visualization

-
-
-
📱
-

Responsive Design

-

Expandable preview panel for seamless viewing on any device

-
-
-
🖼️
-

Artifact Rendering

-

Support for various content types including HTML, SVG, and code snippets

-
-
-
🔒
-

Error Handling

-

Robust error management and loading indicators for smooth user experience

-
-
-
🚀
-

Server-side Streaming

-

Efficient streaming of AI responses for real-time interaction

-
-
-
⚙️
-

Customizable System Messages

-

Tailor the AI's behavior with customizable system prompts

+
+
+
+
+
🤖
+

Multiple AI Providers

+

Integrate with Ollama, OpenAI, and Anthropic for versatile AI experiences

+
+
+
💬
+

Real-time Chat Interface

+

Dynamic UI with real-time message updates and interactive conversations

+
+
+
🖥️
+

Code Highlighting

+

Syntax highlighting for various programming languages

+
+
+
🎨
+

HTML Preview

+

Interactive canvas and script support for immediate visualization

+
+
+
📱
+

Responsive Design

+

Expandable preview panel for seamless viewing on any device

+
+
+
🖼️
+

Artifact Rendering

+

Support for various content types including HTML, SVG, and code snippets

+
+
+
🔒
+

Error Handling

+

Robust error management and loading indicators for smooth user experience

+
+
+
🚀
+

Server-side Streaming

+

Efficient streaming of AI responses for real-time interaction

+
+
+
⚙️
+

Customizable System Messages

+

Tailor the AI's behavior with customizable system prompts

+
@@ -360,22 +309,22 @@

Quick Links

@@ -416,11 +365,11 @@

Support

items: ["responsive UX prototypes", "AI-generated logos", "mood-adaptive interfaces", "biomimetic designs"] } ]; - + const changingWord = document.getElementById('changing-word'); let currentCategoryIndex = 0; let currentItemIndex = 0; - + async function typePhrase(phrase) { changingWord.textContent = ''; for (let char of phrase) { @@ -430,14 +379,14 @@

Support

} await new Promise(resolve => setTimeout(resolve, 1000)); } - + async function erasePhrase() { while (changingWord.textContent.length > 0) { changingWord.textContent = changingWord.textContent.slice(0, -1); await new Promise(resolve => setTimeout(resolve, 20)); } } - + async function glitchEffect() { const originalText = changingWord.textContent; const glitchChars = '!@#$%^&*<>[]{}'; @@ -449,13 +398,13 @@

Support

} changingWord.textContent = originalText; } - + async function displayCategory(category) { await typePhrase(category.name); await new Promise(resolve => setTimeout(resolve, 500)); await erasePhrase(); } - + async function cycleWords() { while (true) { const category = categories[currentCategoryIndex]; @@ -466,12 +415,43 @@

Support

if (Math.random() > 0.7) await glitchEffect(); await erasePhrase(); } - + currentCategoryIndex = (currentCategoryIndex + 1) % categories.length; } } - + + // Start the word cycling effect cycleWords(); - + + // Smooth scrolling for internal links + document.querySelectorAll('a[href^="#"]').forEach(anchor => { + anchor.addEventListener('click', function (e) { + e.preventDefault(); + document.querySelector(this.getAttribute('href')).scrollIntoView({ + behavior: 'smooth' + }); + }); + }); + + // Intersection Observer for scroll-based animations + const observerOptions = { + root: null, + rootMargin: '0px', + threshold: 0.1 + }; + + const observer = new IntersectionObserver((entries, observer) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + entry.target.classList.add('animate'); + observer.unobserve(entry.target); + } + }); + }, observerOptions); + + document.querySelectorAll('.feature').forEach(feature => { + observer.observe(feature); + }); + - + \ No newline at end of file