Friday, August 12, 2016

Getting the Back Office Ready for Wedding Season



Marie is busy editing the summer wedding work and blogging her work. She's the face; if you sit down with her for a consultation then you'll want to hire her to take your photos.  That means it's my job to make sure everything else works. I think it's a fairly easy formula that I follow:
  1. Pay Attention to the Analytics
  2. Keep Fresh and Relevant Content
  3. Always Update the Plan
Looking into the analytics we can tell that the majority of people that spend any time on our website is female and between 18-34 years old. That's exactly where we wanted to be when we were writing our business plan last Fall. Our website is attracting the right attention and it is producing a fair amount of feedback. It is safe to say that we are appealing to the right audience. Now we just have to step up our game.

We ended up with some fresh content through the spring that looks great on Lininger~Rood.com. We did some absolutely magnificent events and met some great couples. Every single one got us closer to having a well balanced portfolio to start this year with. We never focused on the content. It was more about telling the stories of our customers most intimate moments, capturing them in time, and allowing them to share their moments with the world. Their story is the why.

Once we had the why, we started working together to get the how and what. And we're still at it. I mean, the reality is that Marie takes pictures. She loves it and she would do it even if there was no business. But to be in business and provide a value to the customer we had to work backwards from their story to the right pictures. The why doesn't change, but the how and what will keep changing as we evolve and as the market changes. That change is what make us continue to search for the most right answer. 

The Lininger Rood Wedding page.
It holds true that the mobile site produces more traffic than the desktop mirror, but not as much as we expected. It is fairly typical for us to maintain separate site that look and feel the same but are optimized for the platforms that they run on. ShowIt makes it pretty easy to maintain both mobile and desktop sites. We did create new pages styles on the mobile site for Wedding and Family events. The interface looks great and packs a lot of content in a small space. It take some guess work to figure out what the right content is. We guessed. But I think we guessed right enough.

Advertising is an art if you don't have a huge budget. No homegrown startup has an ideal advertising budget so it's always important to figure out how to read the analytics and respond somehow. We started with paying Facebook, Google, and the Knot with targeted adds. Eventually, the numbers showed that Facebook wasn't getting business conversions so we dropped the paid adds and promotions. Free exposure from Blogger, Instagram, and Facebook brings it home just fine. The tools will tell you what is working, not what is not working. So, it takes some experimentation. I cover all of this in my book so I won't go too deep there. What I found out putting all of this together is that art doesn't have a set way to create success. We will keep changing the way we advertise, and the way we promote, and the way present our work. 

So, that leaves us thinking about what we need to take us into the next year: new equipment and services. Equipment upgrades are always in order. We planned to spend as much money as we could keeping our inventory up-to-date and ahead of demand. Marie loves the Nikon D750 and it does a great job for the services that we provide. But it may be time to look for a second camera body. The logical choice is to get another D750 so that we don't have to learn a new set of features. That will provide a good back-up for Marie if something happens goes wrong with her camera and gives us the option to provide an in-house second photographer.

We have been acquiring lenses as the need arises. There are so many different options that we have to prioritize the lens to the service. Our next lenses will give us greater ability to get close-up shots in more detail. Light kits, reflectors, and remotes are always options for spending any additional cash influx.

New services are exciting. They are exciting to think about and exciting to try to create. This business will demand certain things but other things require the photographer to provide. Marie has started building books of her work to showcase her work. We haven't started selling photo albums but I suspect that the year will build into that as we get to some of the more exclusive venues on the calendar in the upcoming year.

Python script runs the world!
One of our couples asked for a photo booth at their reception. Naturally I jumped at the opportunity to develop something that we can use. It gets me out of the shadows. I begun to play with ideas and settled on using a Raspberry Pi with a touchscreen monitor, I wrote a couple of hundred lines of Python to control the user interface, a small camera, a photo printer, and if I connect to a WiFi hot spot, then I can email and blog the photos on the spot. I have a good interface and an idea. Certainly I will need Marie to put the face on it so it looks like something great and I think we will have a winning product.


I am excited about this for a few reasons.
1. It's cool. Everybody loves a photo booth at a party. It's boas and fake mustaches for everybody.
2. We can make photos and videos to include in the wedding packages. We already do beautiful formal photos but now we can include the candid party pictures.
3. It puts branded photos in potential customer's hands.
4. We can built our contact database by having the printed photos with logos, targeted emails, and blog content tied to
5. It is a new revenue stream that customer will pay to use at our events.
6. There is a development opportunity to produce and sell on a large scale.

Can you tell that this is my new favorite part?

As long as we can stay in this magnificent city, then we will continue to grow along our planned path. Not too fast and not too slow.

Saturday, August 6, 2016

Photo Booth Code Base

#!/bin/bash

from tkinter import *
from tkinter import ttk
from tkinter import font
import RPi.GPIO as GPIO
import subprocess, time, os
from picamera import PiCamera
import smtplib
from email.mime.text import MIMEText

GPIO.setmode(GPIO.BCM)

#define GPIO / pins
PUSHBUTTON = 24
PRINT_LED = 22
POSE_LED = 18
READY_LED = 23

#set up pins
GPIO.setup(PUSHBUTTON, GPIO.IN)
GPIO.setup(PRINT_LED, GPIO.OUT)
GPIO.setup(POSE_LED, GPIO.OUT)
GPIO.setup(READY_LED, GPIO.OUT)

GPIO.output(PRINT_LED, True)
GPIO.output(POSE_LED, True)
GPIO.output(READY_LED, True)

#setup the main window as "win"

root = Tk()
root.title("LRP Photo Booth")
root.option_add("tearOff", False)

menubar = Menu(root)
root['menu'] = menubar
menu_file = Menu(menubar)
menu_edit = Menu(menubar)
menubar.add_cascade(menu=menu_file, label='File')
menu_file.add_command(label="Exit", command=root.quit)
menubar.add_cascade(menu=menu_edit, label='Edit')
#add options here to open text editors for the email file and such

ttk.Style().configure("TButton", padding=10, font='helvetica 34')
ttk.Style().configure("TEntry", padding=10, font='helvetica 34')

g_name = "Tell us your  name"
g_email = "youraddress@mail.com"
myFont = font.Font(family = "Helvetica", size = 34, weight = "bold")

mainframe=ttk.Frame(root, padding="12 12 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=2)
mainframe.rowconfigure(0, weight=2)

ttk.Label(mainframe, text="     Press Here and Get Ready!     ", font = myFont).grid(column=1, row=1, columnspan = 3)

#set up the camera
camera = PiCamera()
camera.resolution = (1275, 767)
camera.hflip = False
camera.vflip = False

#define functions
def TakePicture():
        l_photoName = time.strftime("%Y%m%d_%H%M%S")
        snaponePhoto('TL')
        snaponePhoto('TR')
        snaponePhoto('BL')
        snaponePhoto('BR')
        subprocess.call( ['montage', '-tile', '2x2', '-geometry', '+5+5', '*.jpg', '/home/pi/Pictures/'+l_photoName+'.jpg'] )
        sendorDelete(l_photoName)

def snaponePhoto(photoName):
        camera.start_preview()
        time.sleep(2)
        camera.capture(photoName +".jpg")
        camera.stop_preview()

def send(l_name, l_email, l_photoName):

        #send the photo to email
        subject = 'LiningerRoodPhotography'
        mutt =  "mutt -s "+subject+" "+l_email.get()+" john.r.rood@gmail.com < /home/pi/GUI/body_text -a /home/pi/Pictures/"+l_photoName+".jpg"
        ml = subprocess.Popen([mutt], shell = True)
        ml.communicate()
        mutt =  "mutt -s "+subject+" "+l_email.get()+" john.r.rood.update@blogger.com < /home/pi/GUI/body_text -a /home/pi/Pictures/"+l_photoName+".jpg"
        ml = subprocess.Popen([mutt], shell = True)
        ml.communicate()

        #print the photo to the local printer
        printer = "lpr -d SELPHY /home/pi/Pictures/"+l_photoName+".jpg"
        #subprocess.Popen([printer], shell = True)

def sendorDelete(l_photoName):
        global myFont
        l_name = StringVar()
        l_name.set(g_name)
        l_email = StringVar()
        l_email.set(g_email)
        photoName = l_photoName

        def sendButtonAction():
                send(l_name, l_email, photoName)
                contactBox.destroy()

        contactBox = Toplevel(root)
        contactBox.title("Enter Your Contact Info")

        contactFrame=ttk.Frame(contactBox, padding="3 3 12 12")
        contactFrame.grid(column=0, row=0, sticky=(N, W, E, S))
        nameBox=ttk.Entry(contactFrame, textvariable= l_name, font = 30, width = 40).grid(column=2, row=1, columnspan =2)
        emailBox=ttk.Entry(contactFrame, textvariable= l_email, font = 30, width = 40).grid(column=2, row=2, columnspan =2)
        ttk.Label(contactFrame, text="Your Name:", font=  myFont).grid(column=1, row=1, sticky=S)
        ttk.Label(contactFrame, text="Your e-Mail:", font= myFont).grid(column=1, row=2, sticky=S)

        sendButton = ttk.Button(contactFrame, text = "Send It!", command = sendButtonAction).grid(column=2, row=3)
        deleteButton = ttk.Button(contactFrame, text = "Start Over!", command = contactBox.destroy).grid(column=3, row=3)

        for child in contactFrame.winfo_children():child.grid_configure(padx=5, pady=5)

def exitProgram():
        GPIO.cleanup()
        root.quit()

pictureButton = ttk.Button(mainframe, text = "Touch Here To Start!", command = TakePicture).grid(column=1, row=2, columnspan = 3)
exitButton = ttk.Button(mainframe, text = "Exit", command = exitProgram).grid(column=3, row=3, sticky=E)
for child in mainframe.winfo_children():child.grid_configure(padx=5, pady=5)


mainloop()

Friday, August 5, 2016

LiningerRoodPhotography

The Next LRP Photobooth Photo Bomb Star Is Here!

Thanks for using our photo booth. We hope that you had a great time and enjoy the pictures. It's what we do.