ISS ico is a complete Initial Coin Offering with Crypto Currency System Platform Developed with Laravel. Our system is 100% Secure, 100% Responsive and 100% Dynamic. Support Overall All cryptocurrency wallet including Token Offering, Affiliation system, Peer to Peer Coin Transfer, Roadmap,Team, Testimonial dynamic landing page & what you need. It is the most perfect platform for create your own currency system.


Key Features

  • Fully Responsive and Dynamic;
  • Onepage dynamic Landing Template;
  • Easy to Signup & Signin;
  • Multi language supported;
  • Coin Offering RoadMap;
  • Profile Management;
  • Initial coin offering System;
  • Wonderfull frontend and backend
  • Integrate Payment gateway
  • User can buy coin with paypal and any card
  • Coin sell system;
  • Nice Crypto Wallet management;
  • Create new crypto wallet;
  • Generate crypto wallet address;
  • Coin move management;
  • Coin deposit system;
  • Deposit Chart;
  • Withdrawal Chart;
  • Referrance LOG;
  • Password Setup;
  • Security Management;
  • Fully Dynamic Admin Panel;
  • An user can send coin to both internal and external address;
  • User can send coin to wallet address or email address inside the same platform;
  • Users Management;
  • Blog Management;
  • Count down timmer;
  • User accounting;
  • Broadcast Email;
  • Subscribers Management;
  • Banned Users Management;
  • Sell Log;
  • Email Template Management;
  • Faq Management;
  • Road Map Management;
  • Team Members Management;
  • Subscriber Section Management;
  • ICO Sale Management;
  • Sell Log;
  • Use Google authentication;
  • SMS API Management;
  • Use Two factor authentication for login;
  • Multi level affiliation System;

Basic Requirements

  1. Laravel 5.5+
  2. PHP 7.1+,
  3. MySQL 5.7+
  4. Intl PHP Extension
  5. OpenSSL PHP Extension
  6. PDO PHP Extension
  7. Mbstring PHP Extension
  8. Tokenizer PHP Extension
  9. XML PHP Extension
  10. Ctype PHP Extension
  11. JSON PHP Extension
  12. BC Math
  13. Process Control System (Preferred Supervisord)
  14. PHP Dependency Manager (Preferred Composer)
  15. Redis Server For Queue Management
  16. Setup Horizon Supervisor

Files in Plugin

'ISS ICO' is bundled with files:


Local Installation

  1. Unzip into "iss-ico" folder.
  2. Go to the ico folder and open your Terminal/Command window.
  3. Write "php artisan serve" and then press enter.
  4. Open your browser and type "locahost:8000" and hit enter.
  5. Create a database. Example:iss-ico.
  6. Add your database in your .env file.
  7. Migrate your database by typing "php artisan migrate" in your Terminal/Command window.
  8. Seed your database by typing "php artisan db:seed" in your Terminal/Command window.
  9. Login to admin panel

Server Installation

  • Let's upload ISS ICO to our hosting or server. You can use File Manager from your hosting panel or FTP client like FileZilla or WinSCP to upload the zip file.
  • Creating Database

    Database is used to store all of ISS ICO data such as accounts of users and administrators, ico, wallets, referrals etc. It is important to create an empty database before starting with ISS ICO installation. So let's create an empty database first.

  • Step 1: Create a new database

    In first step provide the name of you database and click on Next button.

  • Step 2: Create Database User

    In second step, provide name for database user and also create a password for database. Once you are done, click on Next button to proceed to next step.

  • Step 3: Add User To Database

    In third step, Make sure to click on All Privileges and click on Next button to proceed to final step. Once you click on Next button, your database will be created and you will get a confirmation message on screen. Please do not forget to note database name, database username and database password to use it during installation.

  • Step 4: Import Database

    Now go to phpmyadmin, click the import option then select your database and upload the database file

    After importing your database you see your table list

  • Step 5: Laravel File Upload

    Now go to file manager

  • Select the public_html folder. and inside the folder upload the all laravel file
  • Click the upload option then select your file and complete the upload process
  • Step 6: Extract the uploaded file then move the file into your site folder

  • Select the all file and then move it to the public folder

  • Step 7: Modify the .env file. add the DB_DATABASE name ,DB_USERNAME, DB_PASSWORD

  • Step 8: Select the php version

  • Step 9: Open the index.php file and modify file path


Some screenshots

  • Landing Page screenshots.
  • Admin Dashboard
  • User Management
  • ICO Management
  • Sell Log
  • Landing Setting
  • Admin Setting
  • User Dashboard
  • Referrence Log
  • Transaction Log
  • User Wallets
  • Payment Gateway
  • Deposit, Withdrawal
  • Move Coin
  • Security

Release log

                            Version 1.0 ( February 2019 )

. Details

Thank you for purchasing my app. If you have Created: 09/11/2018 any questions that are beyond the scope of this By: iTechTheme help file, please feel free to email via my user Email: [email protected] page contact form
Thanks so much!

. Layout (XML) Structure

Android provides a straightforward XML vocabulary that corresponds to the View classes and subclasses, such as those for widgets and layouts. You can also use Android Studio's Layout Editor to build your XML layout using a drag-and drop interface.

Now if you want to edit any layout you may do this by drag and drop or by writing xml code.

Here in below one text input field is presented as example. In android the text input field name is “EditText”

<!-->email input field<-->
    android:textColorHint="@color/color_place_holder" />

In android there are few size measurement available. Here we have used dp

(Dot pixel).In android if you want to give a view’s width or height to full then you have to use match parent or if you want to make the text view’s height or width as text view’s needs then you have to use wrap content.

Now suppose you want to customize this text view then follow this-

Here – the size is measured by dp (Dot Pixel)

  • android:layout_width = "match_parent" : To change the view’s width change match_parent to 15dp or as your requirement.
  • android:layout_height = "wrap_content" : To change the view’s height change wrap_content to 15dp or as your requirement
  • android:layout_marginRight = "5dp" : To set margin right change 5dp to your requirement. Like that you may set the margin left, top, bottom
  • android:gravity = "center" : To set gravity of the text change center to your requirement.
  • android:text = ”your text” : To set text to the text view put the text on the position of “your text”.
  • android:textColor = ”@color/color_place_text” : To set text color put your hex color code on the position of “#000000”.
  • android:textSize = "10dp" : To set text size of the text change “10dp” to your requirement.
  • android:textStyle="bold" : To set text style like bold, Italic change “bold” to your requirement.
  • android:hint="username" : this is used to set text input field hint. If you want to change the hint then just replace the “username” with your desired one.
  • android:textColorHint="@color/color_place_holder" : this is used to set text input field hint text color. If you want to change the hint text color then just replace the “#CECECE” with your desired one.
  • android:background="#00000000": this is used to set background of any view. If you want to change the background of this view then just put your background image to the drawable folder and and write it here or put any color.
  • android:paddingLeft = "10dp" : To set padding left change 10dp to your requirement. Like that you may set the padding right, top, bottom.
  • Android:id=”@+id/et_email” : This is the id which is used to remark this view on java class to initiate this input field.

. JAVA Code Explanation

There are 5 packages in this project. The java classes are divided into some packages. They are-

  1. Activity Package - The all activity classes.
  2. Adapter Package – The all adapter classes for setting data to recycler view and placeholder views.
  3. Fragment Package - The all fragment classes.
  4. Helper Package – The all helper classes.
  5. Model package – All Model Classes here

A ) Activity Package :

In this package the following classes are present-


I. :

Splash screen is the first screen of this project. Initially it will show only for 4 seconds and then the login screen will be opened or the main screen will be opened if previously logged in. Basically in splash screen the company logo or banner is shown. To change the time duration of this screen follow below-

    * handler for showing splash screen for 4 seconds and after then finishing this activity and staring the login activity
         new Handler().postDelayed(new Runnable() {
             public void run() { 
                     * finishing this activity after 4 seconds 
                * starting login activity after 4 seconds 
                startActivity(new Intent(SplashActivity.this, AuthActivity.class)); 
                 overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
        }, 4000);//this will finish after 4 seconds

Here a handler is used to do this job. Handler will run its method after 4 seconds (4000 MS) and then first it will finish this activity and then will check for login status and if true will start the main activity otherwise start the login activity. To change the duration just change “4000” to your desired milliseconds. (1 second = 1000 MS). To change the company logo or background image. You will find a layout on this location res/layout/activity_splash.xml and to edit this follow layout (XML) structures.

I. :

We used this activity for placing LogInFragment, RegisterFragment and ForgotPasswordFragment, we used this activity for those fragments. User will switch between those fragments for LogIn, Register, and getting password back.

We have just used fragment transaction for replacing fragments.

    *replace fragment by a new fragment called fragment transaction 
    * @param fragment 
    public void fragmentTransaction(Fragment fragment) {
        /*if current fragment is LogInFragment then hide back button else show back button*/ 
        if (fragment instanceof LogInFragment) { 
        } else {

        /*assign fragment to the global fragment variable */ 
        this.fragment = fragment; 

        /*replace fragment with FragmentTransaction Object*/
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(, fragment); 

The above codes do the transaction of fragments by replacing current fragment with a new fragment.

When the user will press back button, we will bring him back to the previous fragment.

    *called when user press back button 
    public void onBackPressed() {

        /*if current fragment is Register Fragment then come back to log in fragment*/ 
        if (fragment instanceof RegisterFragment) { 

            fragmentTransaction(new LogInFragment()); 
        } else if (fragment instanceof LogInFragment) {

            /*if current fragment is log in fragment then exit the app */ 


I. :

This is the MainActivity for showing all the fragments without auth fragments, we mainly have a custom top panel formally known as Toolbar tough we didn’t used a default toolbar of Android. In the toolbar we have a title and search and setting button.

Then we have a bottom menu section with a middle button, hint: we didn’t used a default BottomNavigationBar for the bottom menu list.

We just used custom menu section with bottomSection by using LinearLayout. See the below code how we handled the clicks of the menu buttons.

    * this function sets functionality to bottom menu 
    private void BottomMenuSelectorBuilder() { 

        /*click listener to home menu*/ 
        mnHome.setOnClickListener(new View.OnClickListener() { 
            public void onClick(View view) { 

                /*change container bottom margin to 0 if have 50*/ 
                RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) frameLayout.getLayoutParams(); 
            if (layoutParams.bottomMargin > 50) { 
                layoutParams.setMargins(0, 0, 0, (int)
    Util.DpToPx(DashboardActivity.this, 0)); 

        /*fragment transition*/ 

        FragmentTransaction(new HomeFragment()); 

        /*chane title*/ 


        /*check buy coin state*/ 
        if (!(Boolean) buyCoin.getTag()) {


    /*click listener for refer menu*/ 
    mnReffer.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 
            /*onw*/    /*click listener for user menu*/ 
    mnUser.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 

        /*check buy coin state*/ 
        if (!(Boolean) buyCoin.getTag()) { 

        /*fragment transaction*/ 
        FragmentTransaction(new UserFragment()); 

The above codes shows that we are making a click event for every menu button and doing a fragment transaction and changing the title, resizing the container position and more.

We mainly have four menu button in the Dashboard section, those are Home, Wallet, User and Referral. The Home section have some, a viewpager containing a set of fragments like About, Roadmap, Team and Token. Home section Top panel is containing ISS ICO Start time and iSS ICO End time. Then we have a very custom and cool tab layout for the view pager section.

B ) Adapter Package :

In this package the following classes are present-


I. :

This is the adapter for the Home fragment, for browsing the fragments list for Home, This includes About, Token, RoadMap and Team. For those fragment horizontally scrolling we have used viewpager. And to use viewpager, we build this adapter class. Here we have a Fragments list and a Title list for the fragments. We will use the title list to bind the tab layout, for showing the right title for the selected fragment.

    * add fragment and title to the list 
    * @param fragment 
    * @param title 
    public void addFragment(Fragment fragment, String title) { 

     *return the title for the current fragment 
    * @param position 
    * @return 
    public CharSequence getPageTitle(int position) { 

         return titles.get(position); 

    *return the fragment list size 
    * @return 
    public int getCount() { 

        return fragmentList.size(); 

In the above codes we have addFragment(), getPagerTitle and getCount() function. The addFragment() function takes Fragment and a title as parameter for adding fragment and title to fragment and title list.

Secondly we have getPageTitle function that takes the position of the adapter and returns the title for that fragment.

We also have a getCount() function that’s return the size of the adapter.

II. ReferAdapter :

This is the adapter for showing the list of user who have registered by my referral link.

The list shows the Username, Joining Date and Balance of the user. We used a recyclerview for showing the list.

For this recycler view we have 3 types of row. Header, Footer and Regular type. The Header row shows the Username, Joining Date and Balance as title. Regular types row show every user data and footer row also shows data but without the bottom line.

    * return the current row type from the position 
    * in our case the first row is the header 
    * last row is the footer 
    * and rest of the rows are regular 
    * @param position 
    * @return 
    public int getItemViewType(int position) { 

        if (position == 0) { 

            return HEADER_TYPE;

        } else if (position == 4) { 

            return FOOTER_TYPE; 

        } else { 

            return REGULAR_TYPE; 


In the above codes we have checked the row type, as the first row is Header row, and the last row is footer row and rest rows are regular type’s row.

    public ReferHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { 

        if (viewType == REGULAR_TYPE) { 
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.refer_row, parent, false); 
            return new ReferHolder(view);
        } else if (viewType == FOOTER_TYPE) { 
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.refer_footer_row, parent, false); 
             return new ReferHolder(view); 
        } else if (viewType == HEADER_TYPE) { 
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.refer_header_row, parent, false);
            return new ReferHolder(view); 

         return null; 

The above codes has a function onCreateViewHolder() that takes a ViewGroup, and row type in int as param and returns the ViewHolder as output.

In this function we will check the row type and will inflate the layout for that row. We have different row for different type of row.

III. :

This is a recycler view adapter for showing the tags for about fragment. In the about section we have some description with some tags, we need this adapter to show the tag list for the section. To show the tag list we need different colors for different rows and we need to show the list horizontally.

We have functions like onBindViewHolder, onCreateViewHolder that a regular recyclerview has.

    * binding data to every row 
    * we have a random number generator that is getting int value from 0 to 4 for every different value we are setting different color to each row 
    * @param holder 
    * @param position 
    public void onBindViewHolder(@NonNull TagHolder holder, int position) { 


        switch (randomColor()) { 
        case 0: 
        case 1: 
         case 2: 
        holder.tagBackground.setCardBackgroundColor(context.getResources().getColor(R.colo r.three));
         case 3: 
        holder.tagBackground.setCardBackgroundColor(context.getResources().getColor(R.colo r.four)); 
         case 4: 
        holder.tagBackground.setCardBackgroundColor(context.getResources().getColor(R.colo r.five)); 

In the above codes, we have onBindViewHolder function where mainly happens databinding for every row. Here we did a trick to show different colors for different row. We just generated a random number and for different value of the random number we have set different color for the every row by seting cardBackground color of cardview.

IV. TeamRecyclerAdapter.Java :

This adapter is showing the team list, in the team there must be the team members. We have a custom layout for the team list we just used a reyclerview for inflating the layout for every row.

    public TeamHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.team_recycler_row, parent, false);
        return new TeamHolder(view); 

The above codes are for inflating the layout for every row.

    public void onBindViewHolder(@NonNull TeamHolder holder, int position) {

The above function, is for binding the data with every row.

IV. WalletRecyclerAdapter.Java :

This recycler adapter is for showing the wallet list, this list is in the wallet Fragment section. And this we have used StaggaredGridLayout Manager for showing the list row in different sizes and with different color. And the last row of the list is an AddWallet row this row will get the user to the AddWallet Fragment.

    //  wallet_recycler.setHasFixedSize(true); 
    /*set options to recycler view */

    StaggeredGridLayoutManager gridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
    gridLayoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEM S_BETWEEN_SPANS); 

    /*make adapter for recycler view */ 
    WalletRecyclerAdapter walletRecyclerAdapter = new WalletRecyclerAdapter(getActivity());

    /*set the adapter to recycler view */ 

The above codes shows the option set for the wallet Recycler view.

    * get the current view type by position
     * the last position row is a AddWalletType and rests are Regular type 
     * @param position 
     * @return 
    public int getItemViewType(int position) { 
         if (position == WalletList.size() - 1) { 
            return TYPE_ADD_WALLET; 
         } else { 
             return TYPE_REGULAR; 

The above codes shows a function named getItemViewType that takes the position of the row and return he type of the row. As we know that last row of the list is the addWallet row and rest of the rows are regular type’s row.

    /*class for making the custom WalletHolder by extending view holder*/ 
    class WalletHolder extends RecyclerView.ViewHolder { 
        /*all views instances*/ 
        TextView walletBalance, walletType, walletName; 
        LinearLayout wallet_background; 
        CardView wallet_card; 

        public WalletHolder(View itemView) { 
            /*type casting all the views*/ 
            walletBalance = itemView.findViewById(; 
            walletName = itemView.findViewById(; 
            walletType = itemView.findViewById(;
            wallet_card = itemView.findViewById(; 
            wallet_background = itemView.findViewById(; 
    /*class for making the custom WalletHolder by extending view holder*/ 
    class AddWalletHolder extends RecyclerView.ViewHolder { 

         /*all views instances*/ 
        TextView addWallet; 
         CardView walletCard; 
            public AddWalletHolder(View itemView) { 


                /*type casting all the views*/ 
                 walletCard = itemView.findViewById(; 
                addWallet = itemView.findViewById(;

                /*click listener for the AddWalletRow*/ 

                walletCard.setOnClickListener(new View.OnClickListener() { 
                    public void onClick(View view) { 
                    /*replace the current set fragment by AddWalletFragment in DashboradActivity*/ 
                    ((DashboardActivity) context).FragmentTransaction(new AddWalletFragment()); 

The above two viewholder classes are for holding the views of the customs layouts and also have the type casting of the views and has click listener event for the AddWallet button.

C.FragmentPackage :

In this package we have all the fragments of this project.

  1. AboutFragment.Java

Fragments in Android:

Following are important points about fragment −

  • A fragment has its own layout and its own behavior with its own life cycle callbacks.
  • You can add or remove fragments in an activity while the activity is running.
  • You can combine multiple fragments in a single activity to build a multi-pane UI.
  • A fragment can be used in multiple activities.
  • Fragment life cycle is closely related to the life cycle of its host activity which means when the activity is paused, all the fragments available in the activity will also be stopped.
  • A fragment can implement a behavior that has no user interface component.
  • Fragments were added to the Android API in Honeycomb version of Android which API version 11.

How to use Fragments?

This involves number of simple steps to create Fragments.

  • First of all decide how many fragments you want to use in an activity. For example let's we want to use two fragments to handle landscape and portrait modes of the device.
  • Next based on number of fragments, create classes which will extend the Fragment class. The Fragment class has above mentioned callback functions. You can override any of the functions based on your requirements.
  • Corresponding to each fragment, you will need to create layout files in XML file. These files will have layout for the defined fragments.
  • Finally modify activity file to define the actual logic of replacing fragments based on your requirement.

Useful Functions Fragments:

    * fragment lifecycle method for inflating the layout for this fragment 
    * @param inflater 
    * @param container 
    @param savedInstanceState 
    * @return 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_about, container, false);
The above onCreateView function is used for inflating the layout for fragment.
        * fragment lifecycle method called after fragment is attached to a activity all view type casting and data binding will do here
        * @param savedInstanceState 
        public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
            /*view type casting*/ 
The above onActivityCreated() function is a lifecycle function of Fragments. It’s being called after the fragment is attached with an activity, this is ideal place to type cast all the views of the fragments and also for binding data with views.


This fragment shows Token name, Whitelist and KYC and country name and Some description about the ICO with some dynamic tags.


This fragment is for adding new Wallet, this fragment contains 2 inputs section wallet address and wallet name. Also have a file picker for uploading file with wallet. And a submit button.


This is the fragment that is triggered with the click with the big middle button of bottom section. This fragment comes in state with a slide up animation and goes through with slide down animation. This fragment have 2 inputs section BTC amount and wallet address for buying token. And a button Withdraw Now.


This fragment is for depositing amount in the wallet, have currency, Select Bank, amount, total fees, and total amount input section with a deposit button.


This fragment is for showing the about the ISS ICO, this fragment contains a ICO starting time, ICO Ending time and a view pager for showing some nested fragments by scrolling horizontally the nested fragments are About, Token, Roadmap and Team.


This fragment show the functionally for log in feature like Email and password input section with log in button and 3rd party log in options like Facebook and Twitter.


This fragment is showing the url of referral of the user and also the list of the registered user list who have registered with the url.


This fragment is for the user where they can register as a new member. Those includes Name, Email, and Password and Phone number. Also have 3rd party registering options like Facebook and Twitter.


This fragment shows a list of plan that are executing and will be executed for this ICO and show along with date and description.


This fragment has the option for the app. Like user can on or off notifications, lock the profile or make him/her profile public etc.


This fragment shows the list of the employees working for the ICO and also show along with his/her image, name and position.


This fragment show the value of BTC raised, Worth of the coin and also a pie graph for showing distribution of Token.


This fragment shows the details of the user, it’s being the place for the profile holder, he/she can see his/her details like, Name, Email, password etc.


This fragment have a list scattered list for showing coins and there balance in the wallet like BTC, TCN , USD and also user can go to AddWallet, Deposit and Withdraw Fragment from here.


This fragment is for withdrawing balance from wallet to bank and have input section such as Deposit fragment.

D )HelperPackage :

This package contains classes that are helping other classes by providing some functionality.


This class is for formatting value for the pie graph. We don’t wants to show decimal value in pie chart. So we just formatted the decimal value into integer value by overriding the getFormattedValue of IVValueForamatter interface.


This class is for overriding the statusbar of Android, we wanted to change the statusbar with image we can only do it after lolypop.


This class have functions that are mainly utility functions like, convert DP to Pixel, getFileNameFromUri, and also have copyToClipboard function.

E )ModelPackage :

This package have mainly Pojo classes, we have just one pojo class that is Wallet

. Resources

There is a folder named “Drawable” which contains the all resources in this project. So there you will find your all necessary resources. Now if you want to change the app logo then just put the logo image file in the drawble folder and then just follow below – There is a file called manifest.xml. You have to edit this file to change your app name or app logo.

        android:label="ISS ICO" 

In manifest.xml file there is a tag named “application” .In application tag change this line “android:icon="@drawable/app_icon” to “android:icon="@drawable/your app logo name without extension”. As like that if you want to change your app name then just set your app name on android:label=”your app name”. If you want to change your app package name then you have to refactor the package name and clean build the project. To do this just follow below –

    <manifest xmlns:android=""   package="com.coin.cdi ">

In manifest file there is a section named “package”. You have to change the package name there .Just right click on mouse on the each portion on behalf of “.”, then there you will found refactor option and then select refactor and then another list will open. There you will found rename option. Select rename and then another dialog will be pop up. There change

the package name to your desired one and check all check boxes and click on refactor. Wait some moments. Then the package name will be changed to your desired one.

. Sources & Libraries

We’ve used just one libraries in this project. The important library is

For making imageview circular

. Thank You

Again, thank you for purchasing ISS-ICO. If you need some help, or support please use email or contact form via codecanyon Profile site.

Hope you happy with the iss-ico system, all the best with your business.