Proposal Description

An overview of your proposal

There are many things to do with computers. We browse the internet, watch videos or listen music, create documents/spreadsheets/presentations with office applications... And the software we are using is remarkable. However, we may need to access our computer when we are away from it, or host our services in home/office network or even to the whole internet. We may want to access to the files, which we created using that remarkable software. And there are remarkable services, and extremely powerful commands to run, but not in an easy and graphical way. Let’s create the most amazing graphical control panel to manage and configure the system using only a pointer (mouse will work perfectly) and a keyboard (to type words, not commands), just like the control panel we are already using on our computers locally.

The need you believe it fulfills

The problem is, there are lots commands, and their different flags/parameters, and their configuration files in different formats, and the settings in those files... Oh, God! It is overwhelming, a typical end user should not need to learn all that stuff.

The problem is not a new one, and it has been tried to be solved for years. The most common practice is to create a web application. However, available alternatives are either not-free (both as in free beer and in freedom), not so easy-to-use, messes the system a lot, or outdated, or all! So, I am intended to develop a revolutionary web application, not only has beautiful, user-friendly interfaces; but also have RESTful API to communicate with other applications, responsive designs for best view on almost every possible device.

Any relevant experience you have

>I am a professional web developer for over 4 years (total of 7 with my non-professional experience), and a Linux system administrator for two. I am also familiar with software packaging for Linux distributions.

How you intend to implement your proposal

Rather than being another "hosting control panel", I want this to be a general control panel for home and office users, web developers, and system administrators to use on desktop computers, servers or cool ARM devices such as a Raspberry Pi! I want to cover management and configurations of web servers (Apache and Nginx), DNS server (bind), database servers (MySQL, PostgreSQL, MariaDB and MongoDB), mail servers (postfix and dovecot), file sharing (FTP, SSH, NFS, Samba and Apple Filing Protocol), version control systems (git and subversion), DLNA media sharing, cronjobs, users, network (wired, wireless, vpn), and firewall.

I will create wrappers for low-level service configurations and a high-level API that uses these wrappers. Furthermore, these will be a Python module that is going to be installed to the system. Thus, users will be able to create their own Python scripts to manage the system.

>Example calls with API:
myapp.shares.add('/home/onurguzel/Music')
myapp.firewall.block(port=21)

I am planning to develop the web interface using Django framework. In order to simplify the design process, I may use Bootstrap by Twitter. My other plan is to create a command-line tool which has the same capabilities with the web interface.

The application will be in three packages. The first one will include Python module and the command-line tool. This will be enough to manage system without learning complex commands or configurations.

Wrappers are going to read, generate, and save the configuration files. But they are save a copy of the configuration to a database. This database will prevent parsing of configuration files every time. However, I want this application to be lightweight and running a database server conflicts with my priorities. For this reason, I preferred to use SQLite.

I will also store modification dates of the configuration files in this database. By tracking changes on these files, the application will be able to tell if there is manual changes on files, or unsaved changes in database.

The second and the third packages will be the web interface and the RESTful API service respectively. They will both depend on the first package, but not each other.

The RESTful API service will help other applications to be developed, such as a desktop interface or a mobile application.

A rough timeline for your progress

I know that preparing wrappers for all those services will not be easy. My expectation is to finish wrappers and API in the first 10 weeks. Then, I can spent 5 weeks with Django, and the last week for packaging.

Any other details you feel we should consider

I have used most of the popular control panels available cPanel/WHM, Plesk, Webmin, and ISPConfig... I know what features users want, and what do they hate. I will use this knowledge for creating a product everybody can love.