🚀 Ihr Projekt. Maßgeschneidert. In Tagen, nicht Wochen.
✨ Hauptfunktionen
Live-Namenssuche
TextWatcher-basierte Echtzeit-Suche durch alle Geburtstagsvideos. Sofortige Filterung während der Eingabe.
YouTube-Integration
Direktes Abspielen von Geburtstagsvideos über die Android YouTube Player Library. Vollbild-Player mit nahtloser Integration.
Room Database
Lokale SQLite-Datenbank mit Room ORM für offline-fähige Video-Listen. DAO-Pattern für typsichere Queries.
MVVM-Architektur
Saubere Trennung von UI (Activity/Fragment), ViewModel und Daten (Room/Repository). LiveData für reaktive UI-Updates.
💻 Quellcode-Einblicke
Echte Code-Snippets aus dem Projekt-Repository — direkt aus der Entwicklungsumgebung.
Kotlin MainActivity — Echtzeitsuche mit ViewModel
package com.geburtstag.kanalapp
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.RecyclerView
import com.geburtstag.kanalapp.adapter.BirthdayVideoAdapter
import com.geburtstag.kanalapp.viewmodel.BirthdayVideoViewModel
class MainActivity : AppCompatActivity() {
private lateinit var viewModel: BirthdayVideoViewModel
private lateinit var adapter: BirthdayVideoAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this)[BirthdayVideoViewModel::class.java]
adapter = BirthdayVideoAdapter { video -> onVideoClick(video) }
recyclerView.adapter = adapter
// LiveData Observation
viewModel.videos.observe(this) { videos ->
adapter.submitList(videos)
emptyTextView.visibility =
if (videos.isEmpty()) View.VISIBLE else View.GONE
}
// Echtzeit-Suche via TextWatcher
searchEditText.addTextChangedListener(object : TextWatcher {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
viewModel.searchVideos(s.toString())
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun afterTextChanged(s: Editable?) {}
})
}
private fun onVideoClick(video: BirthdayVideo) {
val intent = Intent(this, VideoPlayerActivity::class.java).apply {
putExtra("VIDEO_ID", video.id)
putExtra("VIDEO_URL", video.youtubeUrl)
}
startActivity(intent)
}
}
Kotlin Room Database — Data Layer
package com.geburtstag.kanalapp.data
import androidx.room.*
@Entity(tableName = "birthday_videos")
data class BirthdayVideo(
@PrimaryKey val id: String,
val name: String,
val youtubeUrl: String,
val thumbnailUrl: String,
val duration: Int
)
@Dao
interface BirthdayVideoDao {
@Query("SELECT * FROM birthday_videos WHERE name LIKE :query")
fun searchByName(query: String): List<BirthdayVideo>
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertAll(videos: List<BirthdayVideo>)
}
@Database(entities = [BirthdayVideo::class], version = 1)
abstract class BirthdayVideoDatabase : RoomDatabase() {
abstract fun birthdayVideoDao(): BirthdayVideoDao
}
Kotlin Gradle Build — Dependencies & Config
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("com.google.devtools.ksp")
}
android {
namespace = "com.geburtstag.kanalapp"
compileSdk = 34
defaultConfig {
applicationId = "com.geburtstag.kanalapp"
minSdk = 24
targetSdk = 34
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
}
dependencies {
implementation("androidx.room:room-runtime:2.6.1")
implementation("androidx.room:room-ktx:2.6.1")
ksp("androidx.room:room-compiler:2.6.1")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
implementation("com.pierfrancescosoffritti.androidyoutubeplayer:core:12.1.0")
}
📋 Projektstruktur
- Kotlin mit Coroutines für asynchrone Operationen
- Room Database mit KSP Annotation Processing
- MVVM-Architektur mit LiveData & ViewModel
- YouTube Android Player (v12.1.0)
- Gradle 8.1+ mit Kotlin DSL & Version Catalog
🚀 Vibecoding — KI-gestützte Entwicklung
Moderne KI-Coding-Tools („Vibecoding") reduzieren die Entwicklungszeit dramatisch. Was früher Wochen dauerte, entsteht heute in Tagen — mit Code auf Produktionsniveau.
System-Prompt für KI-Coding-Agenten
Baue eine Software-Lösung für folgendes Problem: GeburtstagskanalApp — Android Birthday Video Browser Anforderungen: - Modular und erweiterbar - Fehlerbehandlung mit Logging - Konfiguration via ENV oder Config-Datei - Dokumentation im Code - Tests für Kernfunktionen Tech-Stack: Kotlin, Android, Room DB, YouTube Player, MVVM Ziel: Produktionsreifer Code, kein Prototyp.
Bereit für Ihr eigenes Projekt?
Ob Automation, Web-App oder individuelle Software — wir setzen Ihre Idee um. Unverbindlich, pragmatisch, code-gestützt.