My Projects

  • Apples2Oranges
    Artificial Intelligence that can distinguish between pictures of apples and oranges

  • TV-Tracker
    An iOS app to easily keep track of your favorite TV Shows

  • JeffersonClub-Client
    A cross-platform mobile app to manage community service hours and volunteering

  • APUSH-Companion
    An iOS app to help students prepare for the AP US History Exam

  • FavoriteEmojis
    An iOS jailbreak tweak that changes the "Frequently Used" emoji keyboard section into a custom favorites list


View All Projects

Essay Typer

What is it?

This is a way to transfer your files directly from one device to another. To establish a connection to each other, you and the recipient exchange a set of generated "codes". After that, you can send the recipient as many files as you want (until you close your browser). Also note that there's a 15 second timeout while connecting, so type fast! (This limit wasn't set by me, it's a feature/limitation of Google Chrome)


In peer-to-peer file transfer, your data never gets sent to another server, so it's faster and more secure. You also don't have to worry about the file size limits that exist in emails or texts.


This implementation uses WebRTC to establish a connection between browsers and is (almost) completely serverless. In order for peers to discover each other, a STUN (Session Traversal Utilities for NAT) server must be used. This server finds a network path between the two peers by implementing the ICE (Interactive Connectivity Establishment) protocol. After finding a path, the peer initiating the connection generates an SDP (Session Description Protocol) offer, which must be sent to the other peer. After the recipient receives the first peer's offer, they generate a SDP answer, which must be sent back to the first peer. After both peers receive each other's handshake, the connection can be established and data can start passing directly between them. Normally, a signaling server is used to send the initial handshake. However, I wanted to rely on as little external servers as possible (without hosting my own server instance of course), so I decided to let the users send this data directly to each other. To make this feasible, the handshake had to be heavily compressed. First, the data was first split into smaller chunks, and each chunk was assigned a key. Finally, the combination of shorter keys are assigned to a single key. Each "code" generated is actually a key linked to a chunk of encoded JSON handshake data. If the initial ICE connection fails, it's most likely an issue with a firewall or symmetrical NAT, so sending data directly between the two peers isn't possible.

Share Files

Receive Files

Privacy Policy

Adeem Mawani developed this app as an Ad Supported app. This SERVICE is provided at no cost and is intended for use as is. This page is used to inform visitors regarding my policies with the collection, use, and disclosure of Personal Information if anyone decided to use my Service. If you choose to use my Service, then you agree to the collection and use of information in relation to this policy. The Personal Information that I collect is used for providing and improving the Service. I will not use or share your information with anyone except as described in this Privacy Policy.

Information Collection and Use
This app uses a third party service that may collect certain personally identifiable information used to identify you. (AdMob)

Log Data
Whenever you use my Service, in a case of an error in the app, I collect data and information from your device. This Log Data may include information such as your device Internet Protocol (“IP”) address, device name, operating system version, the configuration of the app when utilizing my Service, the time and date of your use of the Service, and other statistics.

Cookies are files with a small amount of data that are commonly used as anonymous unique identifiers. These are sent to your browser from the websites that you visit and are stored on your device's internal memory. This Service does not use these “cookies” explicitly. However, the app may use third party code and libraries that use “cookies” to collect information and improve their services. You have the option to either accept or refuse these cookies and know when a cookie is being sent to your device. If you choose to refuse these cookies, you may not be able to use some portions of this Service.

Service Providers
I may employ third-party companies and individuals due to the following reasons:
To facilitate our Service; To provide the Service on our behalf; To perform Service-related services; or To assist us in analyzing how our Service is used. I wish to inform users of this Service that these third parties have access to your Personal Information. The reason is to perform the tasks assigned to them on our behalf. However, they are obligated not to disclose or use the information for any other purpose.

Remember that no method of transmission over the internet, or method of electronic storage is 100% secure and reliable, and I cannot guarantee its absolute security.

Children’s Privacy
These Services do not address anyone under the age of 13. I do not knowingly collect personally identifiable information from children under 13.

Changes to This Privacy Policy
I may update this Privacy Policy from time to time. Thus, you are advised to review this page periodically for any changes. These changes are effective immediately after they are posted on this page.

Contact Me
If you have any questions or suggestions about my Privacy Policy, please contact me.



This is bold and this is strong. This is italic and this is emphasized. This is superscript text and this is subscript text. This is underlined and this is code: for (;;) { ... }. Finally, this is a link.

Heading Level 2

Heading Level 3

Heading Level 4

Heading Level 5
Heading Level 6


Fringilla nisl. Donec accumsan interdum nisi, quis tincidunt felis sagittis eget tempus euismod. Vestibulum ante ipsum primis in faucibus vestibulum. Blandit adipiscing eu felis iaculis volutpat ac adipiscing accumsan faucibus. Vestibulum ante ipsum primis in faucibus lorem ipsum dolor sit amet nullam adipiscing eu felis.


i = 0;

while (!deck.isInOrder()) {
    print 'Iteration ' + i;

print 'It took ' + i + ' iterations to sort the deck.';



  • Dolor pulvinar etiam.
  • Sagittis adipiscing.
  • Felis enim feugiat.


  • Dolor pulvinar etiam.
  • Sagittis adipiscing.
  • Felis enim feugiat.


  1. Dolor pulvinar etiam.
  2. Etiam vel felis viverra.
  3. Felis enim feugiat.
  4. Dolor pulvinar etiam.
  5. Etiam vel felis lorem.
  6. Felis enim et feugiat.





Name Description Price
Item One Ante turpis integer aliquet porttitor. 29.99
Item Two Vis ac commodo adipiscing arcu aliquet. 19.99
Item Three Morbi faucibus arcu accumsan lorem. 29.99
Item Four Vitae integer tempus condimentum. 19.99
Item Five Ante turpis integer aliquet porttitor. 29.99


Name Description Price
Item One Ante turpis integer aliquet porttitor. 29.99
Item Two Vis ac commodo adipiscing arcu aliquet. 19.99
Item Three Morbi faucibus arcu accumsan lorem. 29.99
Item Four Vitae integer tempus condimentum. 19.99
Item Five Ante turpis integer aliquet porttitor. 29.99


  • Disabled
  • Disabled