GithubHelp home page GithubHelp logo

launchkit / launchkit Goto Github PK

View Code? Open in Web Editor NEW
2.2K 76.0 260.0 13.36 MB

A set of web-based tools for mobile app developers, now open source!

License: Other

Shell 0.01% Python 29.44% HTML 11.68% Go 0.08% JavaScript 50.50% CSS 8.30%

launchkit's People

Contributors

secondsun avatar shrugs avatar taylorhughes avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

launchkit's Issues

vagrant up --provision stuck on 'Booting VM...'

Fought my way through the steps but can't seem to proceed past the booting VM. I gave it sufficient time of course. Is this a memory size issue?

I tried reducing the memory size so that both fit on a 1GB server but still no luck.

Server Info: 1 GB Memory / 20 GB Disk - Ubuntu 16.04.1 x64
vboxmanage --version : 5.0.26r108824
Vagrant 1.8.1

screen shot 2016-07-28 at 9 28 55 pm

Grammer correction

In web site builder, if a background image is not assignable for selected theme, this text appears:

Background
This will be used as the page or header background.
The template your using doesn't support background images.

It should read "you are" or "you're", not "your".

Last Step (5) Failed - HANDLER [redis : restart redis]

I got all the way to the last step 5 and it looks like everything worked except this.
It still worked.

RUNNING HANDLER [redis : restart redis] ****************************************
fatal: [default]: FAILED! => {"changed": false, "failed": true, "msg": "no service or tool found for: redis"}
...ignoring

[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user

I'm not sure at what point this stops working...but the warnings say it will be removed in a future release.

[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and
make sure become_method is 'sudo' (default).
This feature will be removed in a
future release. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.

Which LaunchKit functionalities require Xcode dev tools?

I intended to install LaunchKit on a DigitalOcean server but was hindered from doing so at the very first installation step. Xcode Command Line tools are only available on macOS. It would be great to understand which functionality requires this and if we can proceed without it?

Automatically ingest reviews for all App Store countries in Review Monitor

Currently we need to not only add the apps we want to track but we need to do so for every App Store location (US, DE, etc.) this is extremely painful to do for 32 countries per app.

I understand it's one of those changes that seem easy to do but probably includes a lot of backend changes. So this issue is just to track the progress and see how many people really want this

+1 if you do

ERROR! Unexpected Exception: name 'urllib2' is not defined

When I run vagrant up --provision this is what happens

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/trusty64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Setting the name of the VM: LaunchKit_default_1470218376948_6255
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 9100 (guest) => 9100 (host) (adapter 1)
    default: 9101 (guest) => 9101 (host) (adapter 1)
    default: 9102 (guest) => 9102 (host) (adapter 1)
    default: 9103 (guest) => 9103 (host) (adapter 1)
    default: 9104 (guest) => 9104 (host) (adapter 1)
    default: 9105 (guest) => 9105 (host) (adapter 1)
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 4.3.36
    default: VirtualBox Version: 5.0
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /Users/Francesco/LaunchKit
==> default: Running provisioner: ansible...
    default: Running ansible-playbook...
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and
make sure become_method is 'sudo' (default).
This feature will be removed in a
future release. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
ERROR! Unexpected Exception: name 'urllib2' is not defined
to see the full traceback, use -vvv
Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.

I run it on Mac OS 10.12 (16A254g)
vboxmanage --version : 5.0.26r108824
Vagrant 1.8.5

Make S3 bucket location configurable

Hello!

Today I install LaunchKit on my VM

All worked fine, but when I try generate ZIP file, I get next screen

zipproblem
and nothing.

I don't see log files.
How I can debug this issue?

Thank you!

WTF is LaunchKit?

Readme says it's the code to LaunchKit... well yeah I got that.

Quite the fallacy of presumption that I have context of WHY I would git clone when it's not clear what all that setup will get me. Sounds like something I might like, but throw us a bone for anyone who didn't know what it was before it was acquired. Plz n thanks

Make installation process simpler

Hey there,

Great work on the product (as I've seen from the website). Unfortunately, the local installation process is a real pain for a simple user, who just wants to have a local version of screenshot builder working. I've tried vagrant up --provision, where earlier I used to get errors regarding python not found, and now with postgresql unable to start.

Could be great if you could simplify the installation for a simple end-user.

Thanks and Regards.

install google app engine failed to find handler for .zip

During vagrant --up provision, I get this error:

TASK [lk-google-app-engine : install google app-engine] ************************
fatal: [default]: FAILED! => {"changed": false, "failed": true, "msg": "Failed to find handler for "/home/vagrant/google_appengine_1.9.27.zip". Make sure the required command to extract the file is installed.", "stat": {"exists": false}}

It seems like my system cannot unzip the file properly. How can I fix this? I'm on OSX 10.11.3.

Connection resets when trying to go to http://localhost:9100/

Was able to successfully run vagrant up --provision (after getting Python dependencies installed via #43).

However, when trying to go to http://localhost:9100/ in the browser, the connection resets. LaunchKit can't be used.

This also happens when I run a curl command (curl 'http://localhost:9100') -- here's the output:

curl: (56) Recv failure: Connection reset by peer

I'll also note, however, that http://localhost:9102/ correctly redirects to launchkit.io.

Has anyone been able to get LaunchKit working with localhost, or has been able to create a workaround?

Failed to connect to the host via ssh .... When provision

I have a problem when I try to provision
$ vagrant up --provision
I got the following error

PLAY [all] *********************************************************************

TASK [setup] *******************************************************************
fatal: [default]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true}
        to retry, use: --limit @ansible/vagrant.retry

PLAY RECAP *********************************************************************
default                    : ok=0    changed=0    unreachable=1    failed=0

Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.

Ansible fails to update apt cache when running "vagrant up"

Hello,

I have followed the HOWTO to the letter but I find myself stuck. When I run on my mac (OSX_10.12.3 / Ansible_2.2.1 / Vagrant_1.9.2):

$ vagrant up --provision

I get:

screen shot 2017-03-09 at 15 44 50

I found some related issue with a workaround here (ansible/ansible#18987 (comment)) but it did not work.

Maybe it is just a syntax issue in the vagrant.yml file but I am not good enough a programer to know what is the problem.

Cheers

problem in web site builder.

I did the following step to built the web site in Launchkit

  1. find the app on store.
  2. upload the images on the local machine
  3. click on save button.

when i click on save button then it shows me errors. I have attach the screenshots.

please help me to solve this problem.

screenshot from 2016-08-16 15-08-49
screenshot from 2016-08-16 15-09-06

Images broken in Preview

I configure my app in the App Website Builder and upload my screen shots, they appear nicely after the upload while I am still editing the app, but after I save or click preview, the images is broken. It points to:
https://launchkit-io.imgix.net/devices/iPhone6White.png?w=750&h=1334&mark=http%3A%2F%2Flocalhost%3A9102%2F_ah%2Fimg%2FQoLYZQTcSPAYIgeiBJkwUQ%3D%3D&markh=970&markalign=center%2Cmiddle

I am running everything in localhost.
Icon and Logo images are fine though.

More info: the images that appear broken is the animation created from the screenshots!

How to get reviews for the app in app store into slack

Hi there,

I understand nobody is actively working on it but may be there is a simple answer to my question. I have created the slack app for launchkit integration and integrated that app with our slack instance. What I need to do is to get the reviews from the app store into our slack instance. Where do I specify the app store app which we want to monitor for reviews to get the reviews into slack?

Thanks

Image uploads failing in browser for some reason

I'm not really a Python/Django person so forgive my ignorance here, but I can't get beyond the screen(see below) in the screenshot builder on the local dev env. The directions don't really mention any setup to GAE. Is there additional config that needs to happen to make that work properly?

screen shot 2016-08-04 at 11 56 46 pm

Email can not send

I can install LK, all running but not the email.
I have try both sendgrid and Gmail without success.

Cannot connect to iTunes connect

There are some problems when connect to iTunes connect. I always get the message "Please check your iTunes Connect login credentials and try again. Note: Two-factor auth is not supported yet."

Provision fails with "fatal error: ffi.h: No such file or directory"

I tried to install LaunchKit and it failed on me on Step 6.

Running vagrant up --provision failed, resulting in the following error output:

TASK [lk-django : install python requirements] *********************************
fatal: [default]: FAILED! => {"changed": false, "cmd": "/usr/local/bin/pip install -r /vagrant/requirements.txt", "failed": true, "msg": "stdout: Requirement already satisfied (use --upgrade to upgrade): boto==2.38.0 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 1))\nRequirement already satisfied (use --upgrade to upgrade): celery[redis]==3.1.17 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 2))\nRequirement already satisfied (use --upgrade to upgrade): cssutils==1.0.1 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 3))\nRequirement already satisfied (use --upgrade to upgrade): django-bitfield==1.7.1 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 4))\nRequirement already satisfied (use --upgrade to upgrade): Django==1.7.3 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 5))\nRequirement already satisfied (use --upgrade to upgrade): djorm-pgarray==1.2.0 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 6))\nRequirement already satisfied (use --upgrade to upgrade): dnspython==1.12.0 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 7))\nCollecting fabric==1.10.1 (from -r /vagrant/requirements.txt (line 8))\nCollecting hiredis==0.1.5 (from -r /vagrant/requirements.txt (line 9))\nCollecting Pillow==3.0.0 (from -r /vagrant/requirements.txt (line 10))\nCollecting premailer==1.3.0 (from -r /vagrant/requirements.txt (line 11))\n  Using cached premailer-1.3.0-py26-none-any.whl\nCollecting psycopg2==2.5.4 (from -r /vagrant/requirements.txt (line 12))\nRequirement already satisfied (use --upgrade to upgrade): pycrypto==2.6.1 in /usr/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 13))\nCollecting pylint==0.28.0 (from -r /vagrant/requirements.txt (line 14))\nCollecting python-memcached==1.53 (from -r /vagrant/requirements.txt (line 15))\nRequirement already satisfied (use --upgrade to upgrade): redis==2.10.3 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 16))\nCollecting requests==2.5.3 (from -r /vagrant/requirements.txt (line 17))\n  Using cached requests-2.5.3-py2.py3-none-any.whl\nCollecting sqlalchemy==0.9.8 (from -r /vagrant/requirements.txt (line 18))\nCollecting tweepy==3.3.0 (from -r /vagrant/requirements.txt (line 19))\n  Using cached tweepy-3.3.0-py2.py3-none-any.whl\nCollecting ua-parser==0.3.6 (from -r /vagrant/requirements.txt (line 20))\nRequirement already satisfied (use --upgrade to upgrade): pytz>dev in /usr/local/lib/python2.7/dist-packages (from celery[redis]==3.1.17->-r /vagrant/requirements.txt (line 2))\nRequirement already satisfied (use --upgrade to upgrade): kombu<3.1,>=3.0.24 in /usr/local/lib/python2.7/dist-packages (from celery[redis]==3.1.17->-r /vagrant/requirements.txt (line 2))\nRequirement already satisfied (use --upgrade to upgrade): billiard<3.4,>=3.3.0.19 in /usr/local/lib/python2.7/dist-packages (from celery[redis]==3.1.17->-r /vagrant/requirements.txt (line 2))\nRequirement already satisfied (use --upgrade to upgrade): six in /usr/lib/python2.7/dist-packages (from django-bitfield==1.7.1->-r /vagrant/requirements.txt (line 4))\nCollecting paramiko>=1.10 (from fabric==1.10.1->-r /vagrant/requirements.txt (line 8))\n  Using cached paramiko-2.0.2-py2.py3-none-any.whl\nCollecting cssselect (from premailer==1.3.0->-r /vagrant/requirements.txt (line 11))\n  Using cached cssselect-0.9.2-py2.py3-none-any.whl\nRequirement already satisfied (use --upgrade to upgrade): lxml in /usr/lib/python2.7/dist-packages (from premailer==1.3.0->-r /vagrant/requirements.txt (line 11))\nCollecting logilab-astng>=0.24.3 (from pylint==0.28.0->-r /vagrant/requirements.txt (line 14))\nCollecting logilab-common>=0.53.0 (from pylint==0.28.0->-r /vagrant/requirements.txt (line 14))\nCollecting requests-oauthlib>=0.4.1 (from tweepy==3.3.0->-r /vagrant/requirements.txt (line 19))\n  Using cached requests_oauthlib-0.6.2-py2.py3-none-any.whl\nRequirement already satisfied (use --upgrade to upgrade): anyjson>=0.3.3 in /usr/local/lib/python2.7/dist-packages (from kombu<3.1,>=3.0.24->celery[redis]==3.1.17->-r /vagrant/requirements.txt (line 2))\nRequirement already satisfied (use --upgrade to upgrade): amqp<2.0,>=1.4.9 in /usr/local/lib/python2.7/dist-packages (from kombu<3.1,>=3.0.24->celery[redis]==3.1.17->-r /vagrant/requirements.txt (line 2))\nCollecting cryptography>=1.1 (from paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8))\n  Using cached cryptography-1.5.tar.gz\nRequirement already satisfied (use --upgrade to upgrade): pyasn1>=0.1.7 in /usr/local/lib/python2.7/dist-packages (from paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8))\nRequirement already satisfied (use --upgrade to upgrade): setuptools in /usr/lib/python2.7/dist-packages (from logilab-common>=0.53.0->pylint==0.28.0->-r /vagrant/requirements.txt (line 14))\nCollecting oauthlib>=0.6.2 (from requests-oauthlib>=0.4.1->tweepy==3.3.0->-r /vagrant/requirements.txt (line 19))\nRequirement already satisfied (use --upgrade to upgrade): idna>=2.0 in /usr/local/lib/python2.7/dist-packages (from cryptography>=1.1->paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8))\nRequirement already satisfied (use --upgrade to upgrade): enum34 in /usr/local/lib/python2.7/dist-packages (from cryptography>=1.1->paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8))\nRequirement already satisfied (use --upgrade to upgrade): ipaddress in /usr/local/lib/python2.7/dist-packages (from cryptography>=1.1->paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8))\nCollecting cffi>=1.4.1 (from cryptography>=1.1->paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8))\n  Using cached cffi-1.8.2.tar.gz\nRequirement already satisfied (use --upgrade to upgrade): pycparser in /usr/local/lib/python2.7/dist-packages (from cffi>=1.4.1->cryptography>=1.1->paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8))\nBuilding wheels for collected packages: cryptography, cffi\n  Running setup.py bdist_wheel for cryptography: started\n  Running setup.py bdist_wheel for cryptography: finished with status 'error'\n  Complete output from command /usr/bin/python -u -c \"import setuptools, tokenize;__file__='/tmp/pip-build-037dd7/cryptography/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))\" bdist_wheel -d /tmp/tmpXoHdSKpip-wheel- --python-tag cp27:\n  c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory\n   #include <ffi.h>\n                   ^\n  compilation terminated.\n  Traceback (most recent call last):\n    File \"<string>\", line 1, in <module>\n    File \"/tmp/pip-build-037dd7/cryptography/setup.py\", line 334, in <module>\n      **keywords_with_side_effects(sys.argv)\n    File \"/usr/lib/python2.7/distutils/core.py\", line 111, in setup\n      _setup_distribution = dist = klass(attrs)\n    File \"/usr/lib/python2.7/dist-packages/setuptools/dist.py\", line 239, in __init__\n      self.fetch_build_eggs(attrs.pop('setup_requires'))\n    File \"/usr/lib/python2.7/dist-packages/setuptools/dist.py\", line 264, in fetch_build_eggs\n      replace_conflicting=True\n    File \"/usr/lib/python2.7/dist-packages/pkg_resources.py\", line 620, in resolve\n      dist = best[req.key] = env.best_match(req, ws, installer)\n    File \"/usr/lib/python2.7/dist-packages/pkg_resources.py\", line 858, in best_match\n      return self.obtain(req, installer) # try and download/install\n    File \"/usr/lib/python2.7/dist-packages/pkg_resources.py\", line 870, in obtain\n      return installer(requirement)\n    File \"/usr/lib/python2.7/dist-packages/setuptools/dist.py\", line 314, in fetch_build_egg\n      return cmd.easy_install(req)\n    File \"/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py\", line 616, in easy_install\n      return self.install_item(spec, dist.location, tmpdir, deps)\n    File \"/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py\", line 646, in install_item\n      dists = self.install_eggs(spec, download, tmpdir)\n    File \"/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py\", line 834, in install_eggs\n      return self.build_and_install(setup_script, setup_base)\n    File \"/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py\", line 1040, in build_and_install\n      self.run_setup(setup_script, setup_base, args)\n    File \"/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py\", line 1028, in run_setup\n      raise DistutilsError(\"Setup script exited with %s\" % (v.args[0],))\n  distutils.errors.DistutilsError: Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1\n  \n  ----------------------------------------\n  Running setup.py clean for cryptography\n  Complete output from command /usr/bin/python -u -c \"import setuptools, tokenize;__file__='/tmp/pip-build-037dd7/cryptography/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))\" clean --all:\n  c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory\n   #include <ffi.h>\n                   ^\n  compilation terminated.\n  Traceback (most recent call last):\n    File \"<string>\", line 1, in <module>\n    File \"/tmp/pip-build-037dd7/cryptography/setup.py\", line 334, in <module>\n      **keywords_with_side_effects(sys.argv)\n    File \"/usr/lib/python2.7/distutils/core.py\", line 111, in setup\n      _setup_distribution = dist = klass(attrs)\n    File \"/usr/lib/python2.7/dist-packages/setuptools/dist.py\", line 239, in __init__\n      self.fetch_build_eggs(attrs.pop('setup_requires'))\n    File \"/usr/lib/python2.7/dist-packages/setuptools/dist.py\", line 264, in fetch_build_eggs\n      replace_conflicting=True\n    File \"/usr/lib/python2.7/dist-packages/pkg_resources.py\", line 620, in resolve\n      dist = best[req.key] = env.best_match(req, ws, installer)\n    File \"/usr/lib/python2.7/dist-packages/pkg_resources.py\", line 858, in best_match\n      return self.obtain(req, installer) # try and download/install\n    File \"/usr/lib/python2.7/dist-packages/pkg_resources.py\", line 870, in obtain\n      return installer(requirement)\n    File \"/usr/lib/python2.7/dist-packages/setuptools/dist.py\", line 314, in fetch_build_egg\n      return cmd.easy_install(req)\n    File \"/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py\", line 616, in easy_install\n      return self.install_item(spec, dist.location, tmpdir, deps)\n    File \"/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py\", line 646, in install_item\n      dists = self.install_eggs(spec, download, tmpdir)\n    File \"/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py\", line 834, in install_eggs\n      return self.build_and_install(setup_script, setup_base)\n    File \"/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py\", line 1040, in build_and_install\n      self.run_setup(setup_script, setup_base, args)\n    File \"/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py\", line 1028, in run_setup\n      raise DistutilsError(\"Setup script exited with %s\" % (v.args[0],))\n  distutils.errors.DistutilsError: Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1\n  \n  ----------------------------------------\n  Running setup.py bdist_wheel for cffi: started\n  Running setup.py bdist_wheel for cffi: finished with status 'error'\n  Complete output from command /usr/bin/python -u -c \"import setuptools, tokenize;__file__='/tmp/pip-build-037dd7/cffi/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))\" bdist_wheel -d /tmp/tmpmlQBIFpip-wheel- --python-tag cp27:\n  running bdist_wheel\n  running build\n  running build_py\n  creating build\n  creating build/lib.linux-x86_64-2.7\n  creating build/lib.linux-x86_64-2.7/cffi\n  copying cffi/backend_ctypes.py -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/commontypes.py -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/setuptools_ext.py -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/api.py -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/__init__.py -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/model.py -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/verifier.py -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/cffi_opcode.py -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/ffiplatform.py -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/cparser.py -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/vengine_gen.py -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/recompiler.py -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/vengine_cpy.py -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/lock.py -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/_cffi_include.h -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/parse_c_type.h -> build/lib.linux-x86_64-2.7/cffi\n  copying cffi/_embedding.h -> build/lib.linux-x86_64-2.7/cffi\n  running build_ext\n  building '_cffi_backend' extension\n  creating build/temp.linux-x86_64-2.7\n  creating build/temp.linux-x86_64-2.7/c\n  x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -DUSE__THREAD -I/usr/include/ffi -I/usr/include/libffi -I/usr/include/python2.7 -c c/_cffi_backend.c -o build/temp.linux-x86_64-2.7/c/_cffi_backend.o\n  c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory\n   #include <ffi.h>\n                   ^\n  compilation terminated.\n  error: command 'x86_64-linux-gnu-gcc' failed with exit status 1\n  \n  ----------------------------------------\n  Running setup.py clean for cffi\nFailed to build cryptography cffi\nInstalling collected packages: cffi, cryptography, paramiko, fabric, hiredis, Pillow, cssselect, premailer, psycopg2, logilab-common, logilab-astng, pylint, python-memcached, requests, sqlalchemy, oauthlib, requests-oauthlib, tweepy, ua-parser\n  Running setup.py install for cffi: started\n    Running setup.py install for cffi: finished with status 'error'\n    Complete output from command /usr/bin/python -u -c \"import setuptools, tokenize;__file__='/tmp/pip-build-037dd7/cffi/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))\" install --record /tmp/pip-sHYgnC-record/install-record.txt --single-version-externally-managed --compile:\n    running install\n    running build\n    running build_py\n    creating build\n    creating build/lib.linux-x86_64-2.7\n    creating build/lib.linux-x86_64-2.7/cffi\n    copying cffi/backend_ctypes.py -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/commontypes.py -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/setuptools_ext.py -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/api.py -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/__init__.py -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/model.py -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/verifier.py -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/cffi_opcode.py -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/ffiplatform.py -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/cparser.py -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/vengine_gen.py -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/recompiler.py -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/vengine_cpy.py -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/lock.py -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/_cffi_include.h -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/parse_c_type.h -> build/lib.linux-x86_64-2.7/cffi\n    copying cffi/_embedding.h -> build/lib.linux-x86_64-2.7/cffi\n    running build_ext\n    building '_cffi_backend' extension\n    creating build/temp.linux-x86_64-2.7\n    creating build/temp.linux-x86_64-2.7/c\n    x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -DUSE__THREAD -I/usr/include/ffi -I/usr/include/libffi -I/usr/include/python2.7 -c c/_cffi_backend.c -o build/temp.linux-x86_64-2.7/c/_cffi_backend.o\n    c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory\n     #include <ffi.h>\n                     ^\n    compilation terminated.\n    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1\n    \n    ----------------------------------------\n\n:stderr:   Failed building wheel for cryptography\n  Failed cleaning build dir for cryptography\n  Failed building wheel for cffi\nCommand \"/usr/bin/python -u -c \"import setuptools, tokenize;__file__='/tmp/pip-build-037dd7/cffi/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))\" install --record /tmp/pip-sHYgnC-record/install-record.txt --single-version-externally-managed --compile\" failed with error code 1 in /tmp/pip-build-037dd7/cffi/\n"}

NO MORE HOSTS LEFT *************************************************************
    to retry, use: --limit @ansible/vagrant.retry

PLAY RECAP *********************************************************************
default                    : ok=23   changed=0    unreachable=0    failed=1

Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.

Anyone knows what's going on?

Website Prieview using localhost in "url" parameter

Hello,

I configured LaunchKit and set it to use a bridged connection. I set the IP as needed in various configuration files, but the Website Preview keeps using "localhost" in many places, which prevents clients on the network from actually loading the resources.

For example: controllerProperties, the shortcut icon in <head>, etc.

Is this a fixed value somewhere, an issue of not using a configuration value, or a configuration variable available which controls that I missed somewhere? If its the latter, I didn't find it in my searching.

I'm posting this a few months after doing the detailed install/config work, so I'm refreshing myself on LaunchKit right now. Any help or hints would be appreciated.

Thank you,
Mike

Add IAP support to Sales Reporter

How difficult would it be to add support for In-App Purchases in the sales reports? Or is there a particular reason why In-App Purchases aren't supported?

Slack is not working

  1. It took me few hours to find that I need to add My Slack App Client ID at 2 places: settings.py and SlackConnect.js. Then, I can connect to my Slack App successful.
  2. I let the vagrant run all days in my Macbook, but no reviews were notify to Slack. I checked on the reviews/dashboard/ and saw new reviews there.
    Please fix this or tell me what can I do to make it working. Thank you.

Setup LK on Amazone EC2

Anyone can make LK run on EC2? I want to use it on real server, not local.
But when i try to install VirtualBox on Centos 7, it failed with error: "Running VirtualBox in a Xen environment is not supported"

Git Clone permission issue

root@CENTCOM:~# git clone [email protected]:LaunchKit/LaunchKit.git
Cloning into 'LaunchKit'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

localhost is not in the domain box.

http://localhost:9105/

Not Found

There’s no App Website configured at this address!

If you have a website you expect to find here, make sure you have entered the current domain in the domain box.

This domain is: localhost

How can I solve this problem?

Screenshot builder showing blank images

Previous two pages of wizard work fine and show the image I uploaded, but the actual screenshot builder page does not show an image, and does not seem to have any way to finish a set.

screen shot 2017-06-20 at 11 33 53 am

MacOS Mojave 10.14 doesn't support VirtualBox 5.1 and lower

Hey everybody,

as you already might have noticed there is a new update for MacOS (10.14). This update only supports Virtual Box 5.2 and newer and so you can't use LaunchKit anymore.

I'm not into this project so I would have a hard time to fix this issue. Maybe anybody here has an idea how to fix it.

Best,
papsti7

Custom Website Builder hosting questions

  1. If I want to remove some of the applications from the dashboard, which file would I be changing? (And in general how can I figure out which file to edit -- its not as simple as look at the html filename)
    I'm looking in skit/LK/public/dashboard . For example, say I want to deactivate or remove the website builder.

  2. Could you provide any suggestions on how to put this on a hosting platform and what type of hosting platform would be required? Would a regular linux host work where I currently have a regular html as well as a wordpress site?

  3. The app requires you to create a user on your own instance. Is there a way to access the backend somewhere to manage/delete/edit users?

  4. Some of the links point back to the LK blog. How do we find the right files to edit these links? For example, editing a website:
    Website Settings
    In order for other people to see your website, you'll need to set up a custom domain name. Read instructions here. Once you set things up, please remember that it can take up to 24 hours for your domain to activate.

TASK [lk-django : install python requirements] -> fatal: [default]: FAILED!

Hi!
Can anyone help me with raising LaunchKit? I do everything like it is described in README, but I always get error with installing six package.

TASK [lk-django : install python requirements] *********************************

fatal: [default]: FAILED! => {"changed": false, "cmd": "/usr/local/bin/pip2 install -r /vagrant/requirements.txt", "msg": "stdout: Requirement already satisfied: boto==2.38.0 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 1)) (2.38.0)\nRequirement already satisfied: celery[redis]==3.1.17 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 2)) (3.1.17)\nRequirement already satisfied: cssutils==1.0.1 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 3)) (1.0.1)\nRequirement already satisfied: django-bitfield==1.7.1 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 4)) (1.7.1)\nRequirement already satisfied: Django==1.7.3 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 5)) (1.7.3)\nRequirement already satisfied: djorm-pgarray==1.2.0 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 6)) (1.2)\nRequirement already satisfied: dnspython==1.12.0 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 7)) (1.12.0)\nRequirement already satisfied: fabric==1.10.1 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 8)) (1.10.1)\nRequirement already satisfied: hiredis==0.1.5 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 9)) (0.1.5)\nRequirement already satisfied: Pillow==3.0.0 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 10)) (3.0.0)\nRequirement already satisfied: premailer==1.3.0 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 11)) (1.3.0)\nRequirement already satisfied: psycopg2==2.5.4 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 12)) (2.5.4)\nRequirement already satisfied: pycrypto==2.6.1 in /usr/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 13)) (2.6.1)\nRequirement already satisfied: pylint==0.28.0 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 14)) (0.28.0)\nRequirement already satisfied: python-memcached==1.53 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 15)) (1.53)\nRequirement already satisfied: redis==2.10.3 in /usr/local/lib/python2.7/dist-packages (from -r /vagrant/requirements.txt (line 16)) (2.10.3)\nCollecting requests==2.5.3 (from -r /vagrant/requirements.txt (line 17))\n  Using cached https://files.pythonhosted.org/packages/95/54/44dc83b5f11c6da06bf9abd18c8a0905e0e297e0a9c3bfbc0c6ee4bdd33d/requests-2.5.3-py2.py3-none-any.whl\nCollecting sqlalchemy==0.9.8 (from -r /vagrant/requirements.txt (line 18))\nCollecting tweepy==3.3.0 (from -r /vagrant/requirements.txt (line 19))\n  Using cached https://files.pythonhosted.org/packages/cd/8b/dfeeb1057d37af810161f8206aa5a6e6e9351dd87ea6f84e4f87d7e3c8a3/tweepy-3.3.0-py2.py3-none-any.whl\nCollecting ua-parser==0.3.6 (from -r /vagrant/requirements.txt (line 20))\nRequirement already satisfied: kombu<3.1,>=3.0.24 in /usr/local/lib/python2.7/dist-packages (from celery[redis]==3.1.17->-r /vagrant/requirements.txt (line 2)) (3.0.37)\nRequirement already satisfied: pytz>dev in /usr/local/lib/python2.7/dist-packages (from celery[redis]==3.1.17->-r /vagrant/requirements.txt (line 2)) (2018.4)\nRequirement already satisfied: billiard<3.4,>=3.3.0.19 in /usr/local/lib/python2.7/dist-packages (from celery[redis]==3.1.17->-r /vagrant/requirements.txt (line 2)) (3.3.0.23)\nRequirement already satisfied: six in /usr/lib/python2.7/dist-packages (from django-bitfield==1.7.1->-r /vagrant/requirements.txt (line 4)) (1.5.2)\nRequirement already satisfied: paramiko>=1.10 in /usr/local/lib/python2.7/dist-packages (from fabric==1.10.1->-r /vagrant/requirements.txt (line 8)) (2.4.1)\nRequirement already satisfied: cssselect in /usr/local/lib/python2.7/dist-packages (from premailer==1.3.0->-r /vagrant/requirements.txt (line 11)) (1.0.3)\nRequirement already satisfied: lxml in /usr/lib/python2.7/dist-packages (from premailer==1.3.0->-r /vagrant/requirements.txt (line 11)) (3.3.3)\nRequirement already satisfied: logilab-astng>=0.24.3 in /usr/local/lib/python2.7/dist-packages (from pylint==0.28.0->-r /vagrant/requirements.txt (line 14)) (0.24.3)\nRequirement already satisfied: logilab-common>=0.53.0 in /usr/local/lib/python2.7/dist-packages (from pylint==0.28.0->-r /vagrant/requirements.txt (line 14)) (1.4.1)\nCollecting requests-oauthlib>=0.4.1 (from tweepy==3.3.0->-r /vagrant/requirements.txt (line 19))\n  Using cached https://files.pythonhosted.org/packages/77/34/d0957563f20b259a31c12f14e858d79f2e66eb539d3c1b9ab7077ef030ca/requests_oauthlib-0.8.0-py2.py3-none-any.whl\nRequirement already satisfied: anyjson>=0.3.3 in /usr/local/lib/python2.7/dist-packages (from kombu<3.1,>=3.0.24->celery[redis]==3.1.17->-r /vagrant/requirements.txt (line 2)) (0.3.3)\nRequirement already satisfied: amqp<2.0,>=1.4.9 in /usr/local/lib/python2.7/dist-packages (from kombu<3.1,>=3.0.24->celery[redis]==3.1.17->-r /vagrant/requirements.txt (line 2)) (1.4.9)\nRequirement already satisfied: pynacl>=1.0.1 in /usr/local/lib/python2.7/dist-packages (from paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8)) (1.2.1)\nRequirement already satisfied: cryptography>=1.5 in /usr/local/lib/python2.7/dist-packages (from paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8)) (2.2.2)\nRequirement already satisfied: bcrypt>=3.1.3 in /usr/local/lib/python2.7/dist-packages (from paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8)) (3.1.4)\nRequirement already satisfied: pyasn1>=0.1.7 in /usr/local/lib/python2.7/dist-packages (from paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8)) (0.4.2)\nRequirement already satisfied: setuptools in /usr/lib/python2.7/dist-packages (from logilab-common>=0.53.0->pylint==0.28.0->-r /vagrant/requirements.txt (line 14)) (3.3)\nCollecting oauthlib>=0.6.2 (from requests-oauthlib>=0.4.1->tweepy==3.3.0->-r /vagrant/requirements.txt (line 19))\n  Using cached https://files.pythonhosted.org/packages/e0/ac/c6a0c98788aa0d61915190d089e9ebe680905a94261effe3936eb8fe356f/oauthlib-2.0.7-py2.py3-none-any.whl\nRequirement already satisfied: cffi>=1.4.1 in /usr/local/lib/python2.7/dist-packages (from pynacl>=1.0.1->paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8)) (1.11.5)\nRequirement already satisfied: enum34; python_version < \"3\" in /usr/local/lib/python2.7/dist-packages (from cryptography>=1.5->paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8)) (1.1.6)\nRequirement already satisfied: idna>=2.1 in /usr/local/lib/python2.7/dist-packages (from cryptography>=1.5->paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8)) (2.6)\nRequirement already satisfied: asn1crypto>=0.21.0 in /usr/local/lib/python2.7/dist-packages (from cryptography>=1.5->paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8)) (0.24.0)\nRequirement already satisfied: ipaddress; python_version < \"3\" in /usr/local/lib/python2.7/dist-packages (from cryptography>=1.5->paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8)) (1.0.22)\nRequirement already satisfied: pycparser in /usr/local/lib/python2.7/dist-packages (from cffi>=1.4.1->pynacl>=1.0.1->paramiko>=1.10->fabric==1.10.1->-r /vagrant/requirements.txt (line 8)) (2.18)\nInstalling collected packages: requests, sqlalchemy, oauthlib, requests-oauthlib, tweepy, ua-parser\n  Found existing installation: requests 2.2.1\n\n:stderr: /usr/local/lib/python2.7/dist-packages/pip/_vendor/urllib3/util/ssl_.py:339: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n  SNIMissingWarning\n/usr/local/lib/python2.7/dist-packages/pip/_vendor/urllib3/util/ssl_.py:137: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n  InsecurePlatformWarning\ncheetah 2.4.4 requires Markdown>=2.0.1, which is not installed.\nlaunchpadlib 1.10.2 requires testresources, which is not installed.\ntweepy 3.3.0 has requirement six>=1.7.3, but you'll have six 1.5.2 which is incompatible.\nCannot uninstall 'requests'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.\n"}

Thanks in advance!

A migration tool for App Website and Screenshots

Brenden & Taylor,

Congratulations on the move to Google, you guys have done great things with LaunchKit and I'm sure you will do great things at Google. I'm an avid user of LaunchKit and am super excited to see you guys open source it to allow it to flourish.

I was wondering if there can be a migration tool so we can get our app website and screenshots migrated?

App Website Builder on Ubuntu16

I'm having issue with one of the components of App Website Builder, the uploading of image for Icon, Logo or Background. During my first installation the uploading seemed to work fine without error but after the uploading, I just saw a broken image icon. When I tried it again without changing any of the settings, I encountered this error, "We ran into a problem uploading that image". I entered inside the guest OS and saw nothing out of ordinary in the upstart logs. Is there anything I can check further?

Add brew-cask install instructions for macOS

Mac users can install Vagrant and VirtualBox using a lot less steps:

  1. Install Homebrew
  2. brew cask install vagrant virtualbox

It'd be cool to see this incorporated into the README :)

Unavle to upload image after setting up everything.

Hi there! Thanks for trying LaunchKit.

Unfortunately, nobody is actively fixing issues on this repo.

If you want to help everybody out, send a pull request instead! We will happily review and integrate any changes to make this project easier to use.

How do I upload images? It's just not giving me the option to. pls help. Thanks.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.