🚀 Interesse an diesem Projekt? Sprechen Sie mich an!
💰 Business Value
Native Android-Apps mit modernem UI und lokaler SQLite-Datenbank — ToDo-App mit RecyclerView, Bottom Sheets und Swipe-Gesten. Basis für produktive Mobile-Anwendungen.
Native Performance
Direkt in Java/Kotlin geschrieben — kein WebView, kein Cross-Plattform-Overhead. Volle Hardware-Nutzung.
Offline-first
SQLite-Datenbank lokal auf dem Gerät — funktioniert komplett ohne Internetverbindung, keine Cloud-Abhängigkeit.
Material Design
Google Material Design Components — FloatingActionButton, Bottom Sheets, Swipe-Gesten — moderne UX out-of-the-box.
RecyclerView-Architektur
Moderne Listen-Darstellung mit RecyclerView + Adapter-Pattern — effizient, performant, erweiterbar.
⚙️ Funktionsweise
Die Kern-Mechanik des Projekts im Überblick.
➕
1. Task erstellen
Per FAB-Tap öffnet sich ein Bottom Sheet — Task-Text eingeben und speichern. SOFORT in SQLite persistiert.
📋
2. Liste anzeigen
RecyclerView zeigt alle Tasks in umgekehrter Reihenfolge — neueste zuerst. Direkt aus SQLite geladen.
👈
3. Swipe-Interaktion
Links-Swipe = Löschen, Rechts-Swipe = Erledigt-Markierung — ItemTouchHelper für natürliche Gesten-Steuerung.
✏️
4. Bearbeiten
Task antippen → Bottom Sheet mit vorausgefülltem Text → Ändern → SQLite-Update → RecyclerView refreshed.
💻 Code-Einblicke
Ein Blick unter die Haube — so ist das Projekt technisch umgesetzt:
SQLite-Datenbank-Helper (Java)
public class DataBaseHelper extends SQLiteOpenHelper {
private SQLiteDatabase db;
private static final String DATABASE_NAME = "TODO_DATABASE";
private static final String TABLE_NAME = "TODO_TABLE";
private static final String COL_1 = "ID";
private static final String COL_2 = "TASK";
private static final String COL_3 = "STATUS";
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME
+ "(ID INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "TASK TEXT, STATUS INTEGER)");
}
public void insertTask(ToDoModel model) {
db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COL_2, model.getTask());
values.put(COL_3, 0);
db.insert(TABLE_NAME, null, values);
}
public void updateStatus(int id, int status) {
db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COL_3, status);
db.update(TABLE_NAME, values, "ID=?",
new String[]{String.valueOf(id)});
}
public void deleteTask(int id) {
db = this.getWritableDatabase();
db.delete(TABLE_NAME, "ID=?",
new String[]{String.valueOf(id)});
}
}
MainActivity mit RecyclerView & FAB (Java)
public class MainActivity extends AppCompatActivity
implements OnDialogCloseListner {
private RecyclerView mRecyclerview;
private FloatingActionButton fab;
private DataBaseHelper myDB;
private List mList;
private ToDoAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerview = findViewById(R.id.recyclerview);
fab = findViewById(R.id.fab);
myDB = new DataBaseHelper(MainActivity.this);
mList = new ArrayList<>();
adapter = new ToDoAdapter(myDB, MainActivity.this);
mRecyclerview.setHasFixedSize(true);
mRecyclerview.setLayoutManager(new LinearLayoutManager(this));
mRecyclerview.setAdapter(adapter);
mList = myDB.getAllTasks();
Collections.reverse(mList);
adapter.setTasks(mList);
fab.setOnClickListener(v ->
AddNewTask.newInstance().show(
getSupportFragmentManager(), AddNewTask.TAG));
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(
new RecyclerViewTouchHelper(adapter));
itemTouchHelper.attachToRecyclerView(mRecyclerview);
}
}
Bottom Sheet Dialog für Task-Eingabe (Java)
public class AddNewTask extends BottomSheetDialogFragment {
private EditText mEditText;
private Button mSaveButton;
private DataBaseHelper myDb;
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
mEditText = view.findViewById(R.id.edittext);
mSaveButton = view.findViewById(R.id.button_save);
myDb = new DataBaseHelper(getActivity());
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if (s.toString().equals("")) {
mSaveButton.setEnabled(false);
mSaveButton.setBackgroundColor(Color.GRAY);
} else {
mSaveButton.setEnabled(true);
mSaveButton.setBackgroundColor(
getResources().getColor(R.color.colorPrimary));
}
}
});
mSaveButton.setOnClickListener(v -> {
String text = mEditText.getText().toString();
ToDoModel item = new ToDoModel();
item.setTask(text);
item.setStatus(0);
myDb.insertTask(item);
dismiss();
});
}
}
⚡ In wenigen Tagen zum MVP — mit Vibecoding.
🚀 Gebaut mit Vibecoding
👴 Klassische Entwicklung
- 📋 2–3 Wochen Requirements
- 🏗️ 2–3 Wochen Architektur
- 💻 3–4 Wochen Implementierung
- 🧪 1–2 Wochen Testing
- ⏱️ Gesamt: 8–13 Wochen
🤖 Vibecoding-Ansatz
- 🗣️ 0.5 Tage Prompt-Engineering
- ⚡ 2–3 Tage iterative Generierung
- 🔧 1–2 Tage Refinement
- ✅ 1 Tag Testing & Deployment
- ⏱️ Gesamt: 5–7 Tage
🎯 Strategische Erkenntnisse
Jedes Projekt liefert wertvolle Einsichten — technisch wie strategisch. Diese Learnings fließen direkt in Folgeprojekte ein.
Open Source = Unabhängigkeit
Offene Technologien bedeuten keine Vendor-Lock-ins, volle Kontrolle über den Code und langfristige Wartbarkeit ohne Lizenzkosten.
Bottom-up statt Big Bang
Kleine, funktionierende Prototypen schlagen monatelange Planungsphasen. Erst beweisen, dann ausrollen — iterativ und risikominimiert.
Wiederverwendbarkeit
Modular aufgebauter Code beschleunigt Folgeprojekte massiv. Einmal gelöste Probleme werden zur Template-Bibliothek für zukünftige Herausforderungen.
KI als Beschleuniger
Vibecoding mit Coding-Agenten komprimiert Entwicklungszyklen von Wochen auf Tage — ohne Qualitätseinbußen durch iterative Prompt-Verfeinerung.
Bereit für Ihr nächstes Projekt?
Lassen Sie uns gemeinsam herausfinden, wo Automatisierung und KI den größten Hebel für Ihr Business haben — unverbindlich und pragmatisch.
Analyse & Konzept
Wir analysieren Ihre Anforderungen und skizzieren eine passgenaue Lösung — technisch fundiert und wirtschaftlich sinnvoll.
Proof-of-Concept
Ein funktionierender Prototyp innerhalb weniger Tage — Sie sehen das Ergebnis, bevor Sie sich committen.
Projektbegleitung
Von der Entwicklung über das Deployment bis zum Go-Live — ich begleite Sie durch den gesamten Prozess.