Generic app framework